opencv鼠标调用函数

本文介绍了如何在OpenCV中利用setMouseCallback函数实现鼠标操作,包括函数参数解析及回调函数onMouse的定义和使用示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

opencv可以通过鼠标来执行一些操作,主要用到setMouseCallback这个函数,函数的具体形式如下:

 void setMousecallback(const string& winname, MouseCallback onMouse, void* userdata=0)
    winname:窗口的名字
    onMouse:鼠标响应函数,回调函数。指定窗口里每次鼠标时间发生的时候,被调用的函数指针。 这个函数的原型应该为void on_Mouse(int event, int x, int y, int flags, void* param);
    userdate:传给回调函数的参数,也可以理解为setMousecallback函数的ID,可将用户的src传到这里

回调函数onMouse定义如下:

void on_Mouse(int event, int x, int y, int flags, void* param);
event是 CV_EVENT_*变量之一
x和y是鼠标指针在图像坐标系的坐标(不是窗口坐标系) 
flags是CV_EVENT_FLAG的组合,代表鼠标的拖拽事件或者键盘鼠标的联合事件
param是用户定义的传递到setMouseCallback函数调用的参数,也可以理解为on_Mouse函数的ID。
Event:
#define CV_EVENT_MOUSEMOVE 0             //滑动
#define CV_EVENT_LBUTTONDOWN 1           //左键点击
#define CV_EVENT_RBUTTONDOWN 2           //右键点击
#define CV_EVENT_MBUTTONDOWN 3           //中键点击
#define CV_EVENT_LBUTTONUP 4             //左键放开
#define CV_EVENT_RBUTTONUP 5             //右键放开
#define CV_EVENT_MBUTTONUP 6             //中键放开
#define CV_EVENT_LBUTTONDBLCLK 7         //左键双击
#define CV_EVENT_RBUTTONDBLCLK 8         //右键双击
#define CV_EVENT_MBUTTONDBLCLK 9         //中键双击

具体编程如下:

#include<opencv2/imgproc/imgproc.hpp>
#include<opencv2/highgui/highgui.hpp>
#include<opencv2/core/core.hpp>
#include<cmath>
#include<iostream>
#include<vector>
using namespace std;
using namespace cv;

Mat src;//可以不用这个全局变量,而使用void*传入,只是在函数里面要将void*转换为Mat
void MouseEvent(int event, int x, int y, int flags, void* data)
{
	char charText[30];
	Mat temp;
	temp = src.clone();
	Vec3b p = temp.at<Vec3b>(y, x); //坐标系不同
	//格式化输出,charText为R=,G=,B=
	sprintf(charText, "R=%d, G=%d, B=%d", p[2], p[1], p[0]);
	//将charText输出到temp图像上,后面的参数都是定义输出的位置,字体,字号,颜色等
	putText(temp,charText,Point(8,20),FONT_HERSHEY_COMPLEX,2,CV_RGB(255,200,178));
	imwrite("E:\\研究生\\学习材料\\学习书籍\\OpenCV图像处理编程实例-源码-20160801\\《OpenCV图像处理编程实例-源码-20160801\\images\\flowerRGB.jpg",temp);
}
int main()
{
	src = imread("E:\\研究生\\学习材料\\学习书籍\\OpenCV图像处理编程实例-源码-20160801\\《OpenCV图像处理编程实例-源码-20160801\\images\\flower4.jpg");
	if (src.empty())
		return -1;
	namedWindow("src");
	setMouseCallback("src",MouseEvent);
	imshow("src",src);
	waitKey(0);
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值