opencv —— setMouseCallback 响应鼠标操作事件
鼠标操作:setMouseCallback 函数
借助回调函数,实现对鼠标每次操作的相应,即每进行一步鼠标操作,都会执行一次回调函数。
void setMouseCallback(const string& window_name, MouseCallback on_Mouse, void* userdata = 0);
- window_name,窗口的名字
- on_Mouse,指定窗口里每次鼠标事件发生时,被调用的函数指针。
这个函数的原型大概形式为 void XXX(int event, int x, int y, int flags, void* param) .
其中 event 是 EVENT_XXX 类型数据,代表鼠标操作事件
x 和 y 是鼠标指针在图像坐标系(不是窗口坐标系)中的坐标值,
flags 是 EVENT_FLAG_XXX 类型数据,也代表鼠标操作事件,复杂的
param 是用户定义的传递到 setMouseCallback 函数调用的参数。
- userdata,用户定义的传递到回调函数的参数,有默认值 0。
成员函数:on_Mouse 函数
void XXX(int event, int x, int y, int flags, void* param)
- event:
EVENT_MOUSEMOVE 0 //滑动
EVENT_LBUTTONDOWN 1 //左键点击
EVENT_RBUTTONDOWN 2 //右键点击
EVENT_MBUTTONDOWN 3 //中键点击
EVENT_LBUTTONUP 4 //左键放开
EVENT_RBUTTONUP 5 //右键放开
EVENT_MBUTTONUP 6 //中键放开
EVENT_LBUTTONDBLCLK 7 //左键双击
EVENT_RBUTTONDBLCLK 8 //右键双击
EVENT_MBUTTONDBLCLK 9 //中键双击
- flags:
EVENT_FLAG_LBUTTON 1 //左鍵拖曳
EVENT_FLAG_RBUTTON 2 //右鍵拖曳
EVENT_FLAG_MBUTTON 4 //中鍵拖曳
EVENT_FLAG_CTRLKEY 8 //(8~15)按Ctrl不放事件
EVENT_FLAG_SHIFTKEY 16 //(16~31)按Shift不放事件
EVENT_FLAG_ALTKEY 32 //(32~39)按Alt不放事件
- void* param 标识了所响应的事件函数,相当于自定义了一个 OnMouseAction()函数的ID。
代码示例:
#include<opencv.hpp>
using namespace cv;
RNG rngs{ };
bool bool_draw = false;
Point pre_point;
Mat src, tem;
Scalar color;
void on_mouse(int event, int x, int y, int flags, void* param) {
switch (event) {
case EVENT_MOUSEMOVE://鼠标移动
if (bool_draw == true) {
tem = src.clone();
color = Scalar(rngs.uniform(, ), rngs.uniform(, ), rngs.uniform(, ));
rectangle(tem, pre_point, Point(x, y), color);
imshow("show", tem);
}
break;
case EVENT_LBUTTONDOWN://鼠标左键按下
bool_draw = true;
pre_point = Point(x, y);
break;
case EVENT_LBUTTONUP://鼠标左键抬起
bool_draw = false;
rectangle(src, pre_point, Point(x, y), color);
break;
}
}
int main() {
src = Mat::zeros(, , CV_8UC3);
namedWindow("show");
setMouseCallback("show", on_mouse);
waitKey();
}
效果展示:

借鉴博客:https://blog.csdn.net/dcrmg/article/details/52027847
opencv —— setMouseCallback 响应鼠标操作事件的更多相关文章
- OpenCV之响应鼠标(四):在图像上绘制出矩形并标出起点的坐标
涉及到两方面的内容:1. 用鼠标画出矩形.2.在图像上绘制出点的坐标 用鼠标绘制矩形,涉及到鼠标的操作,opencv中有鼠标事件的介绍.需要用到两个函数:回调函数CvMouseCallback和注册回 ...
- OpenCV之响应鼠标(二):函数cvSetMouseCallback()和其副程式onMouse()的使用(OpenCV2.4.5)
每當滑鼠在視訊視窗介面點擊一下的時候,都會有固定三個動作 1.點擊(Click) 2.放開(Down)3.滑動(move) 因此,程式執行滑鼠在點擊的時候onMouse()都會連續跑三次,代表滑鼠在點 ...
- OpenCV中响应鼠标消息 (转)
#include <cv.h> #include <highgui.h> #include <stdio.h> #pragma comment(lib," ...
- OpenCV之响应鼠标(三):响应鼠标信息
转自:http://blog.csdn.net/haihong84/article/details/6599838 程序代碼如下: #include <cv.h>#include < ...
- WPF滚动条嵌套,响应鼠标滑轮事件的处理
在C# 中,两个ScrollViewer嵌套在一起或者ScrollViewer里面嵌套一个ListBox.Listview(控件本身有scrollviewer)的时候,我们本想要的效果是鼠标滚动整个S ...
- OpenCV之响应鼠标(一):利用鼠标获取坐标
好久没有更新博客了,今天临时起意,将以前写的示例代码整理了一下,暂且发布一篇,希望对大家有用! 代码一:点击时显示坐标,鼠标移动时不显示. #include <cv.h> #include ...
- 滚动条响应鼠标滑轮事件实现上下滚动的js代码
<script type="text/javascript"> var scrollFunc=function(e){ e=e || window.event; if( ...
- HighGUI图形图像界面初步——鼠标操作
OpenCV中的鼠标操作和滑动条的消息映射方式很类似,都是通过一个中介函数配合一个回调函数来实现的,创建和指定滑动条回调函数为createTrackbar, 而指定鼠标操作消息回调函数的函数为setM ...
- TScrollBox响应鼠标滚轮问题
Delphi的TScrollBox本身并不响应鼠标滚轮事件(不知道为什么),但可以在ScrollBox的鼠标滚动事件中进行控制: procedure TfrmTaskNoteEdit.ScrollBo ...
随机推荐
- 宝塔面板管理阿里云服务器FTP不能用
# 宝塔面板管理阿里云,ftp不能用 解决方法 搜ftp点击设置 然后Ctrl+F搜索ForcePassiveIP 注意2在默认情况下是带#号的,去掉#号,后面的ip地址是阿里云的公网ip 重启,再次 ...
- Docker(一) 简介
简介 Docker是一款针对程序开发人员和系统管理员来开发.部署.运行应用的一款虚拟化平台.Docker 可以让你像使用集装箱一样快速的组合成应用,并且可以像运输标准集装箱一样,尽可能的屏蔽代码层面的 ...
- Linux下的expect
expect简介 expect是一款自动化的脚本解释型的工具. expect基于tcl脚本,expect脚本的运行需要tcl的支持. expect对一些需要交互输入的命令很有帮助,比如ssh ftp ...
- Promise函数的使用
最近在做批量打印并监控显示打印进度的功能,用到了很多异步函数,很多异步函数嵌套在回调函数里面,层层嵌套,导致代码可阅读性与可维护性变得十分糟糕,而且由于都是异步执行的函数,无法知道什么时候能回调结束, ...
- Docker | Mac 通过 Docker 安装 Oracle
Docker | Mac 通过 Docker 安装 Oracle 前言: Oracle 10g 以后就不支持 Mac 版本,因此 Mac 用户需要安装的话可以通过虚拟机或者 Docker 1.在 do ...
- jdk和dubbo的SPI机制
前言:开闭原则一直是软件开发领域中所追求的,开闭原则中的"开"是指对于组件功能的扩展是开放的,是允许对其进行功能扩展的,“闭”,是指对于原有代码的修改是封闭的,即不应该修改原有的代 ...
- 如何运行使用gradle打包的项目
目标:https://github.com/davenkin/springmvc4-helloworld 使用SpringMVC编写的一个HelloWorld程序. 初学Gradle只能一步步摸索前进 ...
- C指针右左法则
摘录的别人的: C语言所有复杂的指针声明,都是由各种声明嵌套构成的.如何解读复杂指针声明呢?右左法则是一个既著名又常用的方法.不过,右左法则其实并不是C标准里面的内容,它是从C标准的声明规定中归纳出 ...
- Exchange2010安装指南
安装流程参考下面的: https://jingyan.baidu.com/article/2c8c281d6893680008252a9c.html 安装环境:windows server 2008( ...
- 移动端H5优化
H5前端优化收藏的网址: https://zhuanlan.zhihu.com/p/25176904 http://tgideas.qq.com/webplat/info/news_version3/ ...