标签:
#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(200, 200), IPL_DEPTH_8U, 3); cvZero(image); IplImage *temp = cvCloneImage(image); cvNamedWindow("Box Example"); cvSetMouseCallback("Box Example", my_mouse_callback, (void*)image); while (1) { cvCopyImage(image, temp); if (drawing_box) draw_box(temp, box); cvShowImage("Box Example", temp); char c = cvWaitKey(15); if (c == 27) break; } cvReleaseImage(&image); cvReleaseImage(&temp); cvDestroyWindow("Box Example"); 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); //确定当前矩形的左上角 width和height不确定 } break; case CV_EVENT_MBUTTONUP:{ //确定一个矩形 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; } }
标签:
原文地址:http://www.cnblogs.com/chenyang920/p/5352841.html