鼠标在窗口中绘制矩形

来源:互联网 发布:php parse url 编辑:程序博客网 时间:2024/05/22 14:13
#include <cv.h>#include <highgui.h>#include <stdio.h>using namespace cv;using namespace std;/***********回调函数声明****************/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(int argc, char* argv[]){box = cvRect(-1, -1, 0, 0);IplImage* image = cvCreateImage(cvSize(200, 200),IPL_DEPTH_8U, 3);/*******把图像清零**********/cvZero(image);IplImage* temp = cvCloneImage(image);//复制图像cvNamedWindow("Box Example");//创建窗口/****************注册回调函数到OpenCV中***********************/cvSetMouseCallback("Box Example", my_mouse_callback, (void *)image);while (1){cvCopyImage(image, temp);//将image数据复制到temp中if (drawing_box)draw_box(temp, box);//在temp中绘制矩形cvShowImage("Box Example", temp);//在Box Example窗口中显示绘制的矩形if (cvWaitKey(15) == 27)break;}}void my_mouse_callback(int event, int x, int y, int flags, void* param){//将注册回调函数中的参数(void*)param恢复并保存到image中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
原创粉丝点击