基于opencv用鼠标在窗口中画矩形和线段的程序

来源:互联网 发布:财商教育是骗局吗 知乎 编辑:程序博客网 时间:2024/05/18 12:03
#include "cv.h"#include "highgui.h"#include using namespace std;CvRect box;bool drawing_box = false;void my_mouse_callback(int events, int x, int y, int flags, void *param);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, 0xff, 0x00) //color);}void draw_line(IplImage *img, CvRect rect) {cvLine(img, cvPoint(box.x, box.y),cvPoint(box.x + box.width, box.y + box.height),cvScalar(255, 255, 0));}int main() {box = cvRect(0, 0, 100, 100);IplImage *image = cvCreateImage(cvSize(1000, 800), IPL_DEPTH_8U, 3);cvZero(image);draw_box(image, box);cvRectangle(image, cvPoint(100, 100), cvPoint(150, 200),cvScalar(255, 255, 255));cvLine(image, cvPoint(200, 100), cvPoint(150, 200), cvScalar(255, 255, 0));IplImage * temp = cvCloneImage(image);cvNamedWindow("box example");cvSetMouseCallback("box example", my_mouse_callback, (void *) image);while (1) {cvCopyImage(image, temp);//将image复制到temp,保证了循环中不停的画矩形而不显示痕迹if (drawing_box) //,鼠标左键按下时,能实时显示矩形框的形状{draw_box(temp, box);draw_line(temp, box);}cvShowImage("box example", temp);if (cvWaitKey(15) == 27)break;}cvReleaseImage(&image);cvReleaseImage(&temp);cvDestroyWindow("box example");return 0;} //鼠标事件回调函数,格式:CvMouseCallback(int event,int x,int y,int flags,void *param)void my_mouse_callback(int events, int x, int y, int flags, void *param) {IplImage *image = (IplImage *) param;if (flags == 16) //CV_EVENT_FLAGS_SHIFTKEY = 16,如果shift键按下,则清屏cvZero(image);switch (events) {case CV_EVENT_MOUSEMOVE: {if (drawing_box) {box.width = x - box.x;box.height = y - box.y;}}break;case CV_EVENT_LBUTTONUP: {drawing_box = false;cout << "height = " << box.height << endl;cout << "width = " << box.width << endl;/*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);draw_line(image, box);}break;case CV_EVENT_LBUTTONDOWN: {drawing_box = true;box = cvRect(x, y, 0, 0);}}}}


0 0
原创粉丝点击