前言
在OpenCV中也存在鼠标的操作,今天我们先介绍一下鼠标中的操作事件,用于为之后的GrabCut分割来做个前提。
API
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:传给回调函数的参数
代码实现
我们再新建一个项目名为opencv--Grabcut,按照配置属性(VS2017配置OpenCV通用属性),然后在源文件写入#include和main方法.
在上图中我们直接把鼠标的回调事件已经写出来了,这个不是重点,重点是我们的鼠标事件。
接下来我们就开始鼠标事件的重点:
定义基本的参数及方法
上图中我们定义的显示的标题为src,这个就不多讲了,然后定义了两个Mat,一个矩形rect。最下面还有个的showimage()的方法,这个方法就是怎么显示图像的。
最重要的方法是onMouse(int event, int x,int y ,int flags, void* param),这个方法用于处理鼠标的操作。
鼠标的操作逻辑
鼠标分别写好了左键按下时,左键按住不动并移动鼠标时和左键松开时的三个事件。
图像显示方法
我们把源图像src复制到result后,然后用红线在result上绘制我们选项的矩形,然后显示出result。
视频演示
<br />
最终鼠标画完的显示效果
-END-