void Traces::applyEffect(ColorImage& image, KinectData& kinectData, const GrayImage& handsMask, int timeElapsed) { // Add new trace points addTraces(kinectData, timeElapsed); updateAndPruneTraces(timeElapsed); drawTraces(image); }
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; }