调用OpenCV函数里面的鼠标响应函数:
cvSetMouseCallback( "img", on_mouse, 0 );
鼠标响应具体实现的函数:
int foo=100;//调节窗口大小,也称为比例系数。 void on_mouse( int event, int x, int y, int flags, void* ustc) { if( event == CV_EVENT_MOUSEMOVE && !(flags & CV_EVENT_FLAG_LBUTTON)) { cvCopy(org,img); CvPoint p0; CvPoint p1; if(x<foo) { if(y<foo) { p0=cvPoint(0,0); p1=cvPoint(2*foo,2*foo); } else if(y>img->height-foo) { p0=cvPoint(0,img->height-2*foo); p1=cvPoint(2*foo,img->height); } else { p0=cvPoint(0,y-foo); p1=cvPoint(2*foo,y+foo); } } else if(x>img->width-foo) { if(y<foo) { p0=cvPoint(img->width-2*foo,0); p1=cvPoint(img->width,2*foo); } else if(y>img->height-foo) { p0=cvPoint(img->width-2*foo,img->height-2*foo); p1=cvPoint(img->width,img->height); } else { p0=cvPoint(img->width-2*foo,y-foo); p1=cvPoint(img->width,y+foo); } } else { if(y<foo) { p0=cvPoint(x-foo,0); p1=cvPoint(x+foo,2*foo); } else if(y>img->height-foo) { p0=cvPoint(x-foo,img->height-2*foo); p1=cvPoint(x+foo,img->height); } else { p0=cvPoint(x-foo,y-foo); p1=cvPoint(x+foo,y+foo); } } cvRectangle(img,p0,p1,CV_RGB(0,255,0)); cvSetImageROI(org,cvRect(p0.x,p0.y,p1.x-p0.x,p1.y-p0.y));//设置感兴趣区域 cvResize(org,dst);//大小重置 cvResetImageROI(org); cvShowImage( "img", img ); cvShowImage("dst",dst); } }
转载于:https://blog.51cto.com/3754839/1401720