opencv-鼠标在窗口中画矩形

xiaoxiao2021-02-27  190

#include<iostream> #include <core.hpp> #include <highgui.hpp> #include<cv.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.width, 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", CV_WINDOW_AUTOSIZE); cvSetMouseCallback( "Box-Example", my_mouse_callback, (void*)image ); while (1) { cvCopy(image, temp); if (drawing_box) draw_box(temp, box); cvShowImage("Box-Example", temp); if (cvWaitKey(15) == 27) break; } cvReleaseImage(&image); cvReleaseImage(&temp); cvDestroyAllWindows(); 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; default: break; } }
转载请注明原文地址: https://www.6miu.com/read-16642.html

最新回复(0)