opencv 鼠标操作 setMouseCallback
来源:互联网 发布:重庆seo推广服务 编辑:程序博客网 时间:2024/06/04 17:44
版权声明:本文为博主原创文章,未经博主允许不得转载。
网上有很多关于setMouseCallback的参数列表和使用方法,但是都是借助全局变量来使用的。并且有人说函数形参没有用。这里使用了opencv的两个参数来实现函数形参的数据传递。
OpenCV中的鼠标响应的函数是setMouseCallback(),可以实现画图的功能。
c++: 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:传给回调函数的参数
void on_Mouse(int event, int x, int y, int flags, void* param);
- event是 CV_EVENT_*变量之一
- x和y是鼠标指针在图像坐标系的坐标(不是窗口坐标系)
- flags是CV_EVENT_FLAG的组合,
- param是用户定义的传递到setMouseCallback函数调用的参数。
我的理解是param和userdata是相互赋值的,是沟通setMousecallback和on_Mouse的桥梁,不过需要注意的是,这个桥梁是一个viod类型的指针,所以在on_Mouse中需要强制类型转换一下。下面是我使用它传递字符串的一个例子。
#include<opencv.hpp>
#include<iostream>using namespace std;
using namespace cv;void leftClick(int event, int x, int y, int flag, void* param)
{
if (event != EVENT_LBUTTONDOWN)
{
return;
}string * ptr =(string *) param;
cout << *ptr;
*ptr = "textFromCallback";
}int main()
{
string p_click ="textFromMain";//最好加static, 避免有时数据赋值后被释放
cout << p_click;
//读取图片
const char* imagename = "C:/Capture001.png";
Mat img = cv::imread(imagename);
if (img.empty())
{
fprintf(stderr,"Can not load image %s\n",imagename);
}
if (!img.data)
//显示窗口
namedWindow("image");//不能省略,否则setMouseCallback不运行
imshow("image",img);
waitKey(30);
setMouseCallback("image", leftClick, &p_click);
waitKey();}
附event:
#defineCV_EVENT_MOUSEMOVE 0
#defineCV_EVENT_LBUTTONDOWN 1
#defineCV_EVENT_RBUTTONDOWN 2
#defineCV_EVENT_MBUTTONDOWN 3
#defineCV_EVENT_LBUTTONUP 4
#defineCV_EVENT_RBUTTONUP 5
#defineCV_EVENT_MBUTTONUP 6
#defineCV_EVENT_LBUTTONDBLCLK 7
#defineCV_EVENT_RBUTTONDBLCLK 8
#defineCV_EVENT_MBUTTONDBLCLK 9
#defineCV_EVENT_FLAG_LBUTTON 1
#defineCV_EVENT_FLAG_RBUTTON 2
#defineCV_EVENT_FLAG_MBUTTON 4
#defineCV_EVENT_FLAG_CTRLKEY 8
#defineCV_EVENT_FLAG_SHIFTKEY 16
#defineCV_EVENT_FLAG_ALTKEY 32
- opencv 鼠标操作 setMouseCallback
- opencv 3.0 鼠标操作 setMouseCallback
- opencv鼠标操作setMouseCallback()与on_MouseHandle()
- OpenCV I_07鼠标画笔 setMouseCallback()
- Opencv函数setMouseCallback鼠标事件响应
- Opencv之鼠标响应setMouseCallback()的用法
- Opencv之鼠标响应setMouseCallback()的用法
- opencv 鼠标操作SetMouseCallback()函数传递用户定义参数的问题
- OpenCV学习笔记之鼠标响应回调函数setMouseCallback
- 利用setMouseCallback函数实现鼠标对图片窗口的操作!
- opencv中的setmousecallback函数
- opencv setMouseCallback() 函数
- opencv的SetMouseCallback函数
- 利用OpenCV鼠标事件设置函数setMouseCallback显示图像像素的RGB、HSV和坐标值!
- opencv中setMousecallback的用法
- opencv中setMousecallback的用法
- opencv中setMousecallback的用法
- opencv中setMousecallback的用法
- 代码设计阶段基本思想
- jQuery选择器总结
- springmvc配置全局的日期转换器
- Android快速开发框架之xUtils---注解模块
- C++ 从文件中提取特定字符串
- opencv 鼠标操作 setMouseCallback
- C与C++学习笔记 --- g++ 和 gcc 学习笔记
- 建立https链接的SLL验证证书失效问题
- Retrofit中如何正确的使用https和证书锁定
- java 问题 无法解析类型 java.lang.CharSequence。从必需的 .class 文件间接引用了它
- Android之SDK、NDK、JNI和so文件
- ExecutorService 的理解与使用
- Android系统信息获取 之三:IMSI号和IMEI解释
- FlipDotView——磁翻点阵显示效果