单片机和opencv_OpenCV 实战 | 深入理解回调函数

本文通过实例介绍如何在OpenCV中使用鼠标回调函数来实现图片截取和保存。详细阐述了回调函数的工作原理,包括定义回调函数、注册函数指针以及响应标识符的使用。还提供了完整的代码示例,展示了从读取图片到实现无限次截图的完整流程。
摘要由CSDN通过智能技术生成

点击上方“计算机视觉life”,选择“星标”

快速获得最新干货

学弟学妹们开始学opencv了,参看的书籍是毛星云的《oepncv3编程入门》,编程环境是用的VS2017或VS2019,该项目是给他们留的第一次作业,作业内容:

读取一张图片,在该图片上截取一个ROI区域,将截取的图片在一个新的窗口内展示,并将该图片保持到工程目录下。

这个题一点也不难,因为书上给的例程已经可以完成大部分工作,只需要自己添加几行代码就可以实现上述功能,但添加这几行代码的过程可以帮助你对鼠标回调函数有一个清楚的理解。

首先我们先看一个回调函数原理:

回调函数就是一个通过函数指针调用的函数。如果你把函数的指针(地址)作为参数传递给另一个函数,当这个指针被用来调用其所指向的函数时,我们就说这是回调函数。回调函数不是由该函数的实现方法直接调用,而是在特定的事件或条件发生时由另外的一方调用的,用于对该事件或条件进行响应。

如果你学过单片机,那你可以将鼠标回调函数理解为单片机的中断函数

运行机制:

⑴定义一个回调函数;⑵函数实现的一方在初始化的时候,将回调函数的函数指针注册给调用者;⑶当特定的事件或条件发生的时候,调用者使用函数指针调用回调函数对事件进行处理。

下面我们看一下opencv自带的鼠标回调函数:

void SetMouseCallback(const char* window_name, MouseCallback on_mouse,void* param = NULL);
  1. 参数window_name:为窗口的名字

  2. 参数on_mouse:用来指定窗口每次鼠标时候发生的时候,被调用函数指针

  3. 参数则为用户定义的传递到回调函数的参数

鼠标回调函数有很多已经定义的响应标识符,如下:

EVENT_MOUSEMOVE      鼠标移动EVENT_LBUTTONDOWN    左键按下EVENT_RBUTTONDOWN    右键按下EVENT_MBUTTONDOWN    滚轮按下EVENT_LBUTTONUP      左键抬起EVENT_RBUTTONUP      右键抬起EVENT_MBUTTONUP      滚轮抬起EVENT_LBUTTONDBLCLK  左键双击EVENT_RBUTTONDBLCLK  右键双击EVENT_MBUTTONDBLCLK  中间双击 EVENT_FLAG_LBUTTON  左键拖拽  EVENT_FLAG_RBUTTON
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值