Beispiel #1
0
void DkPageSegmentation::findRectanglesLab(const cv::Mat & img, std::vector<DkPolyRect>& rects, int channel, int thr) const {

	cv::Mat imgLab;
	cv::cvtColor(img, imgLab, CV_RGB2Lab);	// luminance channel is better than grayscale

	std::vector<int> indexes;

	// if the last channel is cached - take that one
	if (channel == -1) {
		for (int idx = 0; idx < img.channels(); idx++) {
			indexes.push_back(idx);
		}
	}
	else
		indexes.push_back(channel);

	for (int idx : indexes) {

		int ch[] = {idx, 0};
		cv::Mat imgL(img.size(), CV_8UC1);
		cv::mixChannels(&imgLab, 1, &imgL, 1, ch, 1);
		std::vector<DkPolyRect> cr;
		findRectangles(imgL, rects, idx, thr);
		//std::cout << rects.size() << " after channel " << idx << std::endl;
	}
}
std::vector<Rectangle> RectangleDetector::processImage(cv::Mat input)
{
    // Variable Initializations
    input.copyTo(image);

    preprocessImage();
    findRectangles();

    if (! foundRectangle) return std::vector<Rectangle>();
    populateRectangles();
    if (! foundRectangle) return std::vector<Rectangle>();
    filterUniqueRectangles();
    removeSimilarRectangles();
    if (! foundRectangle) return std::vector<Rectangle>();
    removeMarkedRectangles();

    std::cout << "Returning output Rectangles..." << std::endl;

    return outputRectangles;
}
Beispiel #3
0
int main(int argc, char *argv[])
{
    timeval now, prev;
    gettimeofday(&now, NULL);
    gettimeofday(&prev, NULL);
    std::cout<<"Entering crossroad"<<std::endl;
    std::string * filename = 0;
    if (argc > 1)
    {
        filename = new std::string(argv[1]);
    }


    cv::Mat frame;
    cv::Mat back;
    cv::Mat fore;
    cv::VideoCapture * capture;
    //capture->set(CV_CAP_PROP_FRAME_WIDTH,64);
    //capture->set(CV_CAP_PROP_FRAME_HEIGHT,64);


    if (filename != NULL)
    {
        std::cout<<"Reading from "<<*filename<<std::endl;
        capture = new cv::VideoCapture(*filename);

    }
    else
    {
        std::cout<<"Reading from default camera"<<std::endl;
        capture = new cv::VideoCapture(0);
        capture->set(CV_CAP_PROP_FRAME_WIDTH, 160);
        capture->set(CV_CAP_PROP_FRAME_HEIGHT, 120);
    }

    if (!capture->isOpened())
    {
        std::cout<<"Could not open video source\n";
        return -1;
    }
    cv::BackgroundSubtractorMOG2 bg(3, 16, true);

    std::vector<std::vector<cv::Point> > contours;
    std::vector<std::vector<cv::Point> > rectangles;

    cv::namedWindow("Frame",  CV_WINDOW_AUTOSIZE);
    //cv::namedWindow("Background",  CV_WINDOW_AUTOSIZE);
    //cv::namedWindow("Foreground", CV_WINDOW_AUTOSIZE);

    ObjectTracker * objectTracker = new ObjectTracker(5000, 10000.);

    while (true)
    {
        *capture >> frame;
        if (frame.empty()) {
            std::cout<<"Frame empty"<<std::endl;
        }
        bg(frame, fore, 0.01);
        bg.getBackgroundImage(back);
        cv::erode(fore, fore, cv::Mat());
        cv::dilate(fore, fore, cv::Mat());
        cv::findContours(fore, contours, CV_RETR_EXTERNAL, CV_CHAIN_APPROX_TC89_KCOS);
        findRectangles(contours, rectangles);
        filterSmall(rectangles, 100 * 100);
        objectTracker->refresh();
        objectTracker->record(rectangles);
        cv::drawContours(frame, rectangles, -1, cv::Scalar(0, 0, 255), 2);
        drawTraces(frame, objectTracker);
        cv::imshow("Frame", frame);
        //cv::imshow("Background", back);
        //cv::imshow("Foreground", fore);

        if (cv::waitKey(30) >= 0) break;
        gettimeofday(&now, NULL);
        double sec = (double)getTimeDifferenceInMS(now, prev) / 1000.;
        gettimeofday(&prev, NULL);
        std::cout<<1./sec<<" fps"<<std::endl;
        std::cout<<"Total objects present: "<<objectTracker->getTrackedCount()<<std::endl;
    }

    if (filename != NULL)
    {
        delete filename;
    }
    delete capture;
    delete objectTracker;
    return 0;
}