opencv鼠标操作setMouseCallback()与on_MouseHandle()

来源:互联网 发布:网络借贷暂行管理办法 编辑:程序博客网 时间:2024/06/05 22:47

首先介绍调用鼠标操作的函数
setMouseCallback
参数:

  • 目标图像所在的imageWindow名字,仅当鼠标在这个窗口进行操作时,该函数才会起作用。
  • 对鼠标操作进行反应的回掉函数。
  • 传递给回调函数的数据(为空指针类型)。
    例如:setMouseCallback(WINDOW_NAME, on_MouseHandle, (void*)&scrImage);
    意思是当鼠标在WINDOW_NAME上进行操作
    时,触发函数,将scrImage的地址传递给on_MouseHandle函数。
    接下来介绍回调函数。
    这里写图片描述
    参数:
  • EVEN并不是一个简单的我们自定义的int形式的变量名,而是CV_EVENT_*变量之一,一般为setMouseCallBack传过来固定数据,常用的几个数据为:EVENT_MOUSEMOVE(鼠标移动)
    EVENT_LBUTTONDOWN (左键按下)
    EVENT_RBUTTONDOWN (右键按下)
    EVENT_LBUTTONUP (左键弹起)
    EVENT_RUTTONUP (右键弹起)
  • x为鼠标当前所在位置的x坐标。
  • y为鼠标当前所在位子的y坐标
  • flags为标志位
  • 用来接收setMouseCallback传递过来的用户数据,为空指针类型。
    例如:`void on_MouseHandle(int event, int x, int y, int flags, void* param){
    Mat& image = (cv::Mat)param;//强行转为mat指针,然后读取其中的内容(因为传递过来的参数为空指针类型,不能直接使用)
    switch (event){//event根据鼠标不同的操作传递不同的值过来。然后根据这些值进行不同的操作
    case EVENT_MOUSEMOVE://如果鼠标动了
    {………….}break;
    case EVENT_MOUSEMOVE:
    {………….}break;

    case EVENT_LBUTTONDOWN :
    {………….}break;

    case EVENT_RBUTTONDOWN :
    {………….}break;

    case EVENT_LBUTTONUP :
    {………….}break;

    case EVENT_RUTTONUP :
    {………….}break;