Opencv实现可调色画笔的功能

版权声明:本文为博主原创文章,未经博主允许不得转载。
#include<iostream>  
#include<opencv2/opencv.hpp>  
  
using namespace std;  
using namespace cv;  
  
bool g_bDrawing = false;  
RNG g_rng(12345);  
Point g_nCurrPoint;  
Point g_nPrePoint = Point(0,0); 
int g_nThick = 0, g_nBlue = 0, g_nGreen = 0, g_nRed = 255;  
  
/*注意:不能在毁掉函数中写入未初始化的矩阵类,所以需要用时,需要写一个标志位,然后再在while(1)循环内使用*/  
void onMouse(int event, int x, int y, int flag, void *param)  
{  
    Mat &img = *(cv::Mat*)param;  
  
    switch (event)  
    {   
        //点击鼠标左键时  
    case CV_EVENT_LBUTTONDOWN:  
    {
		g_bDrawing = true;
		g_nPrePoint = Point(x, y);  
    }  
        break;  
        //松开鼠标左键时  
    case CV_EVENT_LBUTTONUP:  
    {  
		g_bDrawing = false;  
    }  
        break;  
		        //移动鼠标的时候  
    case CV_EVENT_MOUSEMOVE:  
    {  
		if(g_bDrawing)
		{
		g_nCurrPoint = Point(x, y); 
		
		//将前一点与现在鼠标所在的点连接,色彩由scalar内参数调整,
		line(img, g_nPrePoint, g_nCurrPoint, Scalar(g_nBlue, g_nGreen, g_nRed),g_nThick + 1, 4);  //line函数
		g_nPrePoint=g_nCurrPoint;
		}
    }    
       break;
	}
}

  
int main()  
{  
    Mat srcImage(600, 800, CV_8UC3);  
    Mat tempImage;  
  
    srcImage.copyTo(tempImage);  
    srcImage = Scalar::all(255);  
  
    namedWindow("【鼠标事件窗口】", 1);  
    setMouseCallback("【鼠标事件窗口】", onMouse, (void *)&srcImage);  
  
	//创建颜色控制窗口
  //  namedWindow("【滚动条窗口】", 1);  
    createTrackbar("thick", "【鼠标事件窗口】", &g_nThick, 10, 0);   
    createTrackbar("Red", "【鼠标事件窗口】", &g_nRed, 255, 0);  
    createTrackbar("Green", "【鼠标事件窗口】", &g_nGreen, 255, 0);
    createTrackbar("Blue", "【鼠标事件窗口】", &g_nBlue, 255, 0);
	
后期想法:再创建显示颜色合成窗口,让人知道调试了什么颜色、、、、
//	Mat imag2;
//	Mat ImageROI(srcImage,cv::Rect(srcImage.cols-imag2.cols,srcImage.rows-imag2.rows)); 
//	imag2.copyTo(srcImageROI);
   char key;  
    while (1)  
    {  
        imshow("【鼠标事件窗口】", srcImage);  
  
        key = waitKey(1);  
        if (key == 27)  
            break;  
  
        if (key == 'r')  
            srcImage = Scalar::all(255);  

       if (key == 's') 
		   imwrite("MouseDraw.jpg", srcImage);  
          
        } 
	return 0;  
    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值