Opencv鼠标绘图程序

来源:互联网 发布:up to date数据库介绍 编辑:程序博客网 时间:2024/04/30 08:48
// 鼠标绘图#include <opencv2/opencv.hpp>using namespace std;const char *srcWindowsName = "鼠标绘图程序";const char *saveWindowsName = "鼠标绘图图像";//CvPoint lastprePoint = cvPoint(0,0);//CvPoint lastcurrPoint = cvPoint(0,0);int colornum = 0;int resize = 0;CvMat *sizematrix = {{100, 100, 100}};//int thickness = 0;//鼠标响应事件void on_mouse(int event, int x, int y, int flag, void *param){static bool press = false;static CvPoint prePoint = cvPoint(0, 0);switch(event){case CV_EVENT_LBUTTONDOWN:press = true;prePoint = cvPoint(x, y);//lastprePoint= prePoint;break;case CV_EVENT_LBUTTONUP://lastcurrPoint = cvPoint(x, y);press = false;break;//case CV_EVENT_MBUTTONDOWN://cvLine((IplImage*)param, lastprePoint, lastcurrPoint, CV_RGB(255,255,255), 20);//cvShowImage(srcWindowsName, (IplImage*)param);//break;case CV_EVENT_MOUSEMOVE:if(press){CvPoint currPoint = cvPoint(x, y);if(colornum == 0)cvLine((IplImage*)param, prePoint, currPoint, CV_RGB(0,0,0), 20);//画线函数,指定了线条的颜色,起始点,厚度等heielse if(colornum == 1)cvLine((IplImage*)param, prePoint, currPoint, CV_RGB(255,255,255), 20);//画线函数,指定了线条的颜色,起始点,厚度等 baielse if(colornum == 2)cvLine((IplImage*)param, prePoint, currPoint, CV_RGB(0,255,255), 20);//画线函数,指定了线条的颜色,起始点,厚度等lvprePoint = currPoint;cvRectangle((IplImage*)param, cvPoint(300, 300), cvPoint(325, 325), CV_RGB(0,255,255), CV_FILLED);cvShowImage(srcWindowsName, (IplImage*)param);}break;}}int main(){const int WIDTH = 700, HEIGHT = 500;//创建图像IplImage *srcImage = cvCreateImage(cvSize(WIDTH, HEIGHT), IPL_DEPTH_8U, 3);cvSet(srcImage, CV_RGB(255,255,255));//图像背景颜色//创建窗口cvNamedWindow(srcWindowsName, CV_WINDOW_AUTOSIZE);cvRectangle(srcImage, cvPoint(300, 300), cvPoint(325, 325), CV_RGB(0, 255, 255), CV_FILLED);//显示图像cvShowImage(srcWindowsName, srcImage);//设置鼠标回调函数cvSetMouseCallback(srcWindowsName, on_mouse, (void*)srcImage);//键盘响应事件while(1){char c = cvWaitKey(33);if(c == 27) break;switch(char(c)){case 'r':cvSet(srcImage, CV_RGB(255,255,255));//设置背景cvShowImage(srcWindowsName, srcImage);break;case 'g':colornum = 2;break;case 'b':colornum = 0;break;case 'w':colornum = 1;break;case 's':cvSaveImage(srcWindowsName, srcImage);break;}}//销毁窗口,释放资源cvDestroyWindow(srcWindowsName);cvReleaseImage(&srcImage);return 0;}


0 0