opencv|OpenCV图像处理学习七,利用回调函数setMouseCallback和鼠标响应处理函数onMouse实现ROI感兴趣区的提取

ROI感兴趣区的提取方法
使用line,ellipse,ellipse,rectangle,fillPoly等函数绘制线、矩形、圆、椭圆等基本图形提取感兴趣区域
ROI感兴趣区的提取方法——鼠标操作提取方法
我们通过鼠标交互地提取ROI。OpenCV中鼠标操作依赖鼠标的回调函数和响应函数实现。主函数中调用鼠标的回调函数,将鼠标操作与程序的窗口绑定,产生鼠标操作时回调函数调用鼠标响应函数执行。

回调函数setMouseCallback

void setMouseCallback( const string& winname,MouseCallback onMouse,void* userdata=https://www.it610.com/article/0 )

Parameters:
第一个参数winname,windows视窗名称,对名为winname的视窗进行鼠标监控;
第二个参数onMouse,鼠标响应处理函数,监听鼠标的点击,移动,松开,判断鼠标的操作类型,并进行响应的函数处理;
【opencv|OpenCV图像处理学习七,利用回调函数setMouseCallback和鼠标响应处理函数onMouse实现ROI感兴趣区的提取】第三个参数 userdata,鼠标响应处理函数的ID,与鼠标相应处理函数相匹配就行,暂时只用到默认为0的情况。

鼠标响应处理函数onMouse
OpenCV中,鼠标相应处理函数一般默认形参和返回参数。
void onMouse(int event,int x,int y,int flags,void *ustc)


Parameters:
第一个参数event,鼠标操作时间的整数代号,在opencv中,event鼠标事件总共有10中,从0-9依次代表如下:
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//中间释放

第二个参数x,代表鼠标位于窗口的(x,y)坐标位置,窗口左上角默认为原点,向右为x轴,向下为y轴;
第三个参数y,代表鼠标的拖拽事件,以及键盘鼠标联合事件,总共有32种事件,这里不再赘述。
第四个参数flags,函数参数的编号。
=========================================================================
代码实现:
#include"stdafx.h"#include #include #includeopencv|OpenCV图像处理学习七,利用回调函数setMouseCallback和鼠标响应处理函数onMouse实现ROI感兴趣区的提取
文章图片

opencv|OpenCV图像处理学习七,利用回调函数setMouseCallback和鼠标响应处理函数onMouse实现ROI感兴趣区的提取
文章图片

opencv|OpenCV图像处理学习七,利用回调函数setMouseCallback和鼠标响应处理函数onMouse实现ROI感兴趣区的提取
文章图片


    推荐阅读