The rectangle coordinate is applied initial region for tracking.
refer to video and source code.
#include < stdio.h> #include < iostream> #include < opencv2\opencv.hpp> //#include < opencv2/core/core.hpp> //#include < opencv2/highgui/highgui.hpp> //#include < opencv2/video/background_segm.hpp> //#include < opencv2\gpu\gpu.hpp> //#include < opencv2\legacy\legacy.hpp> #ifdef _DEBUG #pragma comment(lib, "opencv_core247d.lib") //#pragma comment(lib, "opencv_imgproc247d.lib") //MAT processing //#pragma comment(lib, "opencv_objdetect247d.lib") //HOGDescriptor //#pragma comment(lib, "opencv_gpu247d.lib") //#pragma comment(lib, "opencv_features2d247d.lib") #pragma comment(lib, "opencv_highgui247d.lib") //#pragma comment(lib, "opencv_ml247d.lib") //#pragma comment(lib, "opencv_stitching247d.lib"); //#pragma comment(lib, "opencv_nonfree247d.lib"); //#pragma comment(lib, "opencv_video247d.lib") //#pragma comment(lib, "opencv_legacy247d.lib") #else #pragma comment(lib, "opencv_core247.lib") //#pragma comment(lib, "opencv_imgproc247.lib") //#pragma comment(lib, "opencv_objdetect247.lib") //#pragma comment(lib, "opencv_gpu247.lib") //#pragma comment(lib, "opencv_features2d247.lib") #pragma comment(lib, "opencv_highgui247.lib") //#pragma comment(lib, "opencv_ml247.lib") //#pragma comment(lib, "opencv_stitching247.lib"); //#pragma comment(lib, "opencv_nonfree247.lib"); //#pragma comment(lib, "opencv_video247.lib") //#pragma comment(lib, "opencv_legacy247.lib") #endif using namespace std; using namespace cv; bool selectObject = false; Rect selection; Point origin; int trackObject = 0; Mat image; static void onMouse( int event, int x, int y, int, void* ) { if( selectObject ) { selection.x = MIN(x, origin.x); selection.y = MIN(y, origin.y); selection.width = std::abs(x - origin.x); selection.height = std::abs(y - origin.y); selection &= Rect(0, 0, image.cols, image.rows); } switch( event ) { case CV_EVENT_LBUTTONDOWN: origin = Point(x,y); selection = Rect(x,y,0,0); selectObject = true; break; case CV_EVENT_LBUTTONUP: selectObject = false; if( selection.width > 0 && selection.height > 0 ) trackObject = -1; break; } } int main (void) { VideoCapture cap(0); Mat frame; namedWindow( "Demo", 0 ); setMouseCallback( "Demo", onMouse, 0 ); for(;;) { cap >> frame; if( frame.empty() ) break; frame.copyTo(image); if( selectObject && selection.width > 0 && selection.height > 0 ) { Mat roi(image, selection); bitwise_not(roi, roi); printf("%d %d %d %d\n", selection.x, selection.y, selection.width, selection.height); } imshow( "Demo", image ); if( waitKey(10) > 10 ) break; } return 0; }