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;
}
--