鼠标事件示例

#include <opencv2/imgproc/imgproc.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <iostream>
#include <stdio.h>
// 全局变量 
cv::Mat srcImage;
void MouseEvent(int event, int x, int y, int flags, void* data)
{
    char charText[30];
    cv::Mat tempImage, hsvImage;
    tempImage = srcImage.clone();
    // 左键按下移动显示RGB信息
    if (event == CV_EVENT_LBUTTONDOWN)
    {
        cv::Vec3b p = tempImage.at<cv::Vec3b>(y,x);
        sprintf(charText, "R=%d, G=%d, B=%d", p[2], p[1], p[0]);
        // 写RGB文本信息到图像
	    cv::putText(tempImage, charText, cv::Point(8,20),
	           cv::FONT_HERSHEY_PLAIN, 2, CV_RGB(255,255,255));
        imwrite("..\\images\\RGBFlower4.jpg", tempImage);
    }
    // 右键按下移动显示HSV信息
    else if (event == CV_EVENT_RBUTTONDOWN)
    {
        // 转换成HSV图像
        cv::cvtColor(tempImage, hsvImage, CV_BGR2HSV);
        cv::Vec3b p = hsvImage.at<cv::Vec3b>(y,x);
        // 获取相应的通道值
        sprintf(charText, "H=%d, S=%d, V=%d", p[0], p[1], p[2]);
        // 写HSV文本信息到图像
    	cv::putText(tempImage, charText, cv::Point(8,20),
           cv::FONT_HERSHEY_PLAIN, 2, CV_RGB(255,255,255));
        imwrite("..\\images\\HSVFlower4.jpg", tempImage);
    }
    // 没有按下键显示对应坐标
    else
    {
	    // 移动鼠标显示坐标
	    sprintf(charText, "x=%d, y=%d", x, y);
	    // 写XY坐标文本信息到图像
    	cv::putText(tempImage, charText, cv::Point(8,20),
           cv::FONT_HERSHEY_PLAIN, 2, CV_RGB(255,255,255));
	    imwrite("..\\images\\NOFlower4.jpg", tempImage);
	}
    cv::imshow("srcImage", tempImage);
    
}
int main(int argc, char** argv)
{
	// 读取图像及判断是否正确读入
    //srcImage =  cv::imread("..\\images\\flower4.jpg");
	srcImage =  cv::imread("4.jpg");
    if (srcImage.empty())
        return -1;
    // 回调事件响应
    cv::namedWindow("srcImage");
    cv::setMouseCallback("srcImage", MouseEvent, 0);
    cv::imshow("srcImage", srcImage);
    cv::waitKey(0);
    return 0;
}

转载:http://blog.youkuaiyun.com/zhuwei1988

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值