opencv用鼠标画矩形

来源:互联网 发布:c语言打印double 编辑:程序博客网 时间:2024/06/05 03:01

  代码来自《learning opencv》

   

#include<cv.h>#include<highgui.h>void my_mouse_callback(int event,int x,int y,int flags,void*param);CvRect box;bool drawing_box=false;void draw_box(IplImage*img,CvRect rect){cvRectangle(img,cvPoint(box.x,box.y),cvPoint(box.x+box.width,box.y+box.height),cvScalar(0xff,0x00,0x00));}int main(){box=cvRect(-1,-1,0,0);IplImage*image=cvCreateImage(cvSize(500,500),IPL_DEPTH_8U,3);cvZero(image);IplImage *temp=cvCloneImage(image);cvNamedWindow("box1");cvSetMouseCallback("box1",my_mouse_callback,(void*)image);while(1){cvCopyImage(image,temp);if(drawing_box)draw_box(temp,box);cvShowImage("box1",temp);if(cvWaitKey(18)==27)break;}cvReleaseImage(&image);cvReleaseImage(&temp);cvDestroyWindow("box1");return 0;}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;}if(box.height<0){box.y+=box.height;box.height*=-1;}draw_box(image,box);}break;}}


0 0
原创粉丝点击