// 鼠标绘图
#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);//画线函数,指定了线条的颜色,起始点,厚度等 hei
else if(colornum == 1)
cvLine((IplImage*)param, prePoint, currPoint, CV_RGB(255,255,255), 20);//画线函数,指定了线条的颜色,起始点,厚度等 bai
else if(colornum == 2)
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;
//创建图像
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;
}
Opencv鼠标绘图程序
最新推荐文章于 2024-03-25 23:14:46 发布