p key is pause, for capture of roi image patch
esc key is stop
..
#include < stdio.h> #include < iostream> #include < opencv2\opencv.hpp> #ifdef _DEBUG #pragma comment(lib, "opencv_core249d.lib") #pragma comment(lib, "opencv_highgui249d.lib") #else #pragma comment(lib, "opencv_core249.lib") #pragma comment(lib, "opencv_highgui249.lib") #endif using namespace std; using namespace cv; bool selectObject = false; Rect selection; Point origin; Mat image; bool pause =false; Rect PatchRect; Mat PatchImg; static void onMouse( int event, int x, int y, int, void* ) { if( selectObject & pause) { 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: if(selectObject && pause) { if(selection.width > 30 && selection.height > 30 ) { PatchRect = selection; image( PatchRect ).copyTo( PatchImg ); imshow("Selected Img", PatchImg ); }else selection = Rect(0,0,0,0); } selectObject = false; pause = false; break; } } int main (void) { VideoCapture cap(0); Mat frame; namedWindow( "Demo", 0 ); setMouseCallback( "Demo", onMouse, 0 ); printf("P key is pause, ESC key is exit.\n"); for(;;) { if(!pause) cap >> frame; if( frame.empty() ) break; frame.copyTo(image); if( pause && selection.width > 0 && selection.height > 0 ) { rectangle(image, Point(selection.x-1, selection.y-1), Point(selection.x+selection.width+1, selection.y+selection.height+1), CV_RGB(255,0,0) ); } imshow( "Demo", image ); char k = waitKey(10); if( k == 27 ) break; else if(k == 'p' || k=='P' ) pause=!pause; } return 0; }--