1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59
|
using namespace cvb;
int main(int argc, char** argv)
{
IplImage* tmp_frame = NULL;
IplImage* img;
CvCapture* cap = NULL;
CvRect rect;
CvConnectedComp track_comp;
if( argc < 2 )
{
std::cout << "Please specify video file name" << std::endl;
exit(0);
}
cap = cvCaptureFromFile(argv[1]);
tmp_frame = cvQueryFrame(cap);
if(!tmp_frame)
{
std::cout << "Bad video" << std::endl;
exit(0);
}
/*Video ma tete*/
//rect = cvRect(420,200,100,100);
/*Video tache*/
rect = cvRect(160,100,20,20);
cvNamedWindow("meanshift", 1);
//cvNamedWindow("NB", 1);
img = cvCreateImage(cvGetSize(tmp_frame),tmp_frame->depth,1);
//CvBGStatModel* bg_model = cvCreateFGDStatModel(tmp_frame);
for( int fr = 1;tmp_frame; tmp_frame = cvQueryFrame(cap), fr++ )
{
//cvUpdateBGStatModel( tmp_frame, bg_model);
//cvSetImageROI(tmp_frame,rect);
cvConvertImage(tmp_frame,img);
cvMeanShift( img, rect, cvTermCriteria(CV_TERMCRIT_EPS | CV_TERMCRIT_ITER, 10, 1 ), &track_comp);
//cvCamShift( img, rect, cvTermCriteria(CV_TERMCRIT_EPS | CV_TERMCRIT_ITER, 10, 1 ), &track_comp,&box);
//cvRectangle(tmp_frame,cvPoint(rect.x,rect.y),cvPoint(rect.x+rect.width,rect.y+rect.height),cvScalar(0,120),1,8,0);
//cvRectangle(tmp_frame,cvPoint(track_comp.rect.x-track_comp.rect.width/2,track_comp.rect.y-track_comp.rect.height/2),cvPoint(track_comp.rect.x +track_comp.rect.width/2,track_comp.rect.y+track_comp.rect.height/2),cvScalar(0,120),1,8,0);
cvRectangle(tmp_frame,cvPoint(track_comp.rect.x-10,track_comp.rect.y-10),cvPoint(track_comp.rect.x+10,track_comp.rect.y+10),cvScalar(0,120),1,8,0);
cvShowImage("meanshift", tmp_frame);
//cvShowImage("NB", bg_model->foreground);
cvWaitKey(25);
}
cvReleaseCapture(&cap);
cvDestroyAllWindows();
return 0;
} |
Partager