Opencv鼠标绘图程序

// 鼠标绘图
#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;
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值