opencv鼠标操作

来源:互联网 发布:攻城狮和程序员打油诗 编辑:程序博客网 时间:2024/06/04 23:19
#include <opencv2/opencv.hpp>using namespace std;using namespace cv;void on_MouseHandle(int event,int x,int y,int flags,void * param);void DrawRectangle(cv::Mat& img,cv::Rect box);Rect g_rectangle;bool g_bDrawingBox  = false;RNG g_rng(12345);int main(int argc,char** argv){g_rectangle = Rect(-1,-1,0,0);Mat srcImage(600,800,CV_8UC3),tempImage;srcImage.copyTo(tempImage);srcImage = Scalar::all(0);namedWindow("程序窗口");setMouseCallback("程序窗口",on_MouseHandle,(void*)&srcImage);while(1){srcImage.copyTo(tempImage);if(g_bDrawingBox)DrawRectangle(tempImage,g_rectangle);imshow("程序窗口",tempImage);if(waitKey(10)==27)break;}return 0;}void on_MouseHandle(int event,int x,int y,int flags,void * param){Mat & image = *(cv::Mat*) param;switch(event){case EVENT_MOUSEMOVE:{if(g_bDrawingBox){g_rectangle.width = x- g_rectangle.x;g_rectangle.height = y- g_rectangle.y;}}break;case EVENT_LBUTTONDOWN:{g_bDrawingBox = true;g_rectangle = Rect(x,y,0,0);}break;case EVENT_LBUTTONUP:{g_bDrawingBox = false;if(g_rectangle.width<0){g_rectangle.x+=g_rectangle.width;g_rectangle.width*= -1;}if(g_rectangle.height<0){g_rectangle.y+=g_rectangle.height;g_rectangle.height*=-1;}DrawRectangle(image,g_rectangle);}break;}}void DrawRectangle(cv::Mat& img,cv::Rect box){rectangle(img,box.tl(),box.br(),Scalar(g_rng.uniform(0,255),g_rng.uniform(0,255),g_rng.uniform(0,255)));rectangle(img,box.tl(),box.br(),Scalar(g_rng.uniform(0,255),g_rng.uniform(0,255),g_rng.uniform(0,255)));}

原创粉丝点击