opencv 鼠标事件例子
//鼠标在窗口中画图形 #include <cv.h> // OpenCV 的基本函数头文件 #include <highgui.h> //OpenCV 的图像显示函数头文件 //回调函数 void my_mouse_callback(int event, int x, int y, int flags, void* param); //方形 CvRect box; bool drawing_box = false;//标志是否划了 void draw_box( IplImage* image, CvRect rect ) { cvRectangle( image, cvPoint(box.x,box.y), cvPoint(box.x+box.width,box.y+box.height), cvScalar(0xff,0xff,0x00) ); } int main( int argc, char* argv[]) { box = cvRect(-1,-1,0,0); IplImage* image = cvCreateImage( cvSize(400,400), IPL_DEPTH_8U, 3 ); cvZero( image ); IplImage* temp = cvCloneImage( image ); cvNamedWindow( "Box Example",0 ); cvSetMouseCallback( "Box Example", my_mouse_callback, (void*) image ); while(1) { cvCopyImage( image, temp ); if( drawing_box ) draw_box( temp, box ); cvShowImage( "Box Example", temp ); if( cvWaitKey( 15 ) == 27 ) break; } cvReleaseImage( &image ); cvReleaseImage( &temp ); cvDestroyWindow( "Box Example" ); } void my_mouse_callback(int event, int x, int y, int flags, void* param) { IplImage* image = (IplImage*) param; switch(event) { case CV_EVENT_MOUSEMOVE: { if( drawing_box ) { box.width = x-box.x; box.height = y-box.y; } }break; case CV_EVENT_LBUTTONDOWN: { drawing_box = true; box = cvRect(x,y,0,0); }break; case CV_EVENT_LBUTTONUP: { drawing_box = false; if( box.width<0 ) { box.x += box.width; box.width *= -1; }else if( box.width>image->width ) { box.x = 0+image->width/4; box.width = image->width/2; } if( box.height<0 ) { box.y += box.height; box.height *= -1; }else if( box.height>image->height ) { box.y = 0+image->height/4; box.height = image->height/2; } draw_box(image,box); }break; } }
posted on 2013-03-01 09:04 NewPanderKing 阅读(368) 评论(0) 收藏 举报
浙公网安备 33010602011771号