opencv窗口鼠标绘图

// 鼠标绘图  
#include "stdafx.h"
#include <opencv2/opencv.hpp>  
#include <opencv\cv.h>
using namespace std;  
using namespace cv;
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;  
//鼠标响应事件  
Mat srcImage;


void on_mouse(int event, int x, int y, int flag, void *param)  
{  

Mat srcImage1=*(Mat*)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)  
{ line(srcImage1,prePoint,currPoint,CV_RGB(0,0,0),20,8,0);
  imshow(srcWindowsName, srcImage1); 
} //  cvLine((IplImage*)param, prePoint, currPoint, CV_RGB(0,0,0), 20);//画线函数,指定了线条的颜色,起始点,厚度等    hei  
            else if(colornum == 1)  
               line(srcImage,prePoint,currPoint,CV_RGB(0,0,0),20,8,0);// cvLine((IplImage*)param, prePoint, currPoint, CV_RGB(255,255,255), 20);//画线函数,指定了线条的颜色,起始点,厚度等 bai  
            else if(colornum == 2)  
               line(srcImage,prePoint,currPoint,CV_RGB(0,0,0),20,8,0);
// cvLine((IplImage*)param, prePoint, currPoint, CV_RGB(0,255,255), 20);//画线函数,指定了线条的颜色,起始点,厚度等    lv  
            prePoint = 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;  
    //创建图像  
    srcImage = cvCreateImage(cvSize(WIDTH, HEIGHT), IPL_DEPTH_8U, 3);  
    //cvSet(srcImage, CV_RGB(255,255,255));//图像背景颜色  
srcImage.setTo(255);
    //创建窗口  
    cvNamedWindow(srcWindowsName, CV_WINDOW_AUTOSIZE);  
    rectangle(srcImage, cvPoint(300, 300), cvPoint(325, 325), CV_RGB(0, 255, 255), CV_FILLED);  
    //显示图像  
imshow(srcWindowsName, srcImage);  
    //设置鼠标回调函数  
   // cvSetMouseCallback(srcWindowsName, on_mouse, 0);  
setMouseCallback(srcWindowsName,on_mouse,(void*)&srcImage);//---------传递的参数为Mat类型;
    //键盘响应事件  
    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
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值