openCV 用鼠标在窗口中画方形

来源:互联网 发布:混沌理论 知乎 编辑:程序博客网 时间:2024/05/04 13:05
<span style="font-size:14px;">// chapter.cpp : 定义控制台应用程序的入口点。//#include "stdafx.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(0,0,255));}int _tmain(int argc, _TCHAR* argv[]){box=cvRect(-1,-1,0,0);//初始化boxIplImage *image=cvCreateImage(cvSize(200,200),IPL_DEPTH_8U,3);cvZero(image);IplImage * temp=cvCloneImage(image);cvNamedWindow("Box",0);cvSetMouseCallback("Box",my_mouse_callback,(void *)image);//将回调函数注册到openCVwhile(1){cvCopy(image,temp);if(drawing_box) draw_box(temp,box);cvShowImage("Box",temp);if(cvWaitKey(15)==27) break;}cvReleaseImage(&image);cvReleaseImage(&temp);cvDestroyWindow("Box");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;}}</span>

0 0
原创粉丝点击