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 ...
随机推荐
- 【学习笔记】Git的日常使用
Note:本笔记是我学习廖雪峰老师的Git教程整理得到,在此向廖老师的无私付出表示衷心的感谢! 0.Git的历史 Git是一个分布式的版本控制系统(C语言编写,一开始为Linux社区服务,替代BitK ...
- js中函数this的指向
this 在面试中,js指向也常常被问到,在开发过程中也是一个需要注意的问题,严格模式下的this指向undefined,这里就不讨论. 普通函数 记住一句话哪个对象调用函数,该函数的this就指向该 ...
- 🔥SpringBoot图文教程2—日志的使用「logback」「log4j」
有天上飞的概念,就要有落地的实现 概念+代码实现是本文的特点,教程将涵盖完整的图文教程,代码案例 文章结尾配套自测面试题,学完技术自我测试更扎实 概念十遍不如代码一遍,朋友,希望你把文中所有的代码案例 ...
- 【原创】为什么Mongodb索引用B树,而Mysql用B+树?
引言 好久没写文章了,今天回来重操旧业.毕竟现在对后端开发的要求越来越高,大家要做好各种准备. 因此,大家有可能遇到如下问题 为什么Mysql中Innodb的索引结构采取B+树? 回答这个问题时,给自 ...
- HDU 6521 K-th Closest Distance (主席树+二分)
题意: 给你一个数组,q次询问,每次问你[l,r]范围内与p距离第k大的元素的与p的距离,强制在线 思路: 主席树提取出[l,r]内的权值线段树,然后二分与p的距离mid ask该权值线段树里[p-m ...
- HDU6395 Sequence(矩阵快速幂+数论分块)
题意: F(1)=A,F(2)=B,F(n)=C*F(n-2)+D*F(n-1)+P/n 给定ABCDPn,求F(n) mod 1e9+7 思路: P/n在一段n里是不变的,可以数论分块,再在每一段里 ...
- Python学习框架(持续更新)
1.数据类型 整型:整数,1.2.3...这种 浮点型:简单理解就是小数,1.23.3.141572653等等 字符型:“这是字符”,简单说就是我们说的话,都可以作为字符 布尔值:只有2种,true. ...
- oracle安装异常汇总
. 运行 ./runInstaller 安装界面出现乱码问题 解决方案: export NLS_LANG=AMERICAN_AMERICA.UTF8 export LC_ALL=C .运行 ./run ...
- Golang设置https访问,以及http如何重定向到https
设置https访问: 原始代码为http监听: func main() { server := &http.Server{ Addr: ":8080", ... } go ...
- Go语言实现:【剑指offer】字符串的排列
该题目来源于牛客网<剑指offer>专题. 输入一个字符串,按字典序打印出该字符串中字符的所有排列.例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,b ...