OpenCV使用鼠标事件绘制矩形代码示例

需积分: 19 8 下载量 20 浏览量 更新于2024-09-13 收藏 1KB TXT 举报
"这是一个使用OpenCV库通过鼠标交互绘制矩形的C++代码示例,适用于Visual Studio 2012,需要安装OpenCV 2.x版本。代码中定义了一个鼠标回调函数`my_mouse_callback`,当鼠标在窗口上进行点击或移动时,该函数会被调用,用于更新和绘制矩形。" 在OpenCV中,我们可以利用`cvSetMouseCallback`函数来设置鼠标事件的回调函数。这个函数接受四个参数:窗口名、回调函数指针、用户数据(在这个例子中是IplImage指针)和一个可选的回调标志。当鼠标事件触发时,OpenCV会调用我们提供的回调函数。 本代码的主要流程如下: 1. 初始化变量:定义了一个CvRect类型的变量`box`用来存储矩形的坐标,以及一个布尔变量`drawing_box`来跟踪是否正在绘制矩形。初始化`box`的坐标为(-1,-1,0,0),表示矩形未被选择。 2. 创建一个名为"boxexample"的窗口,并设置其大小为200x200像素的IplImage对象`image`。为了显示绘制过程,创建了一个临时的`temp`图像用于显示。 3. 设置鼠标回调函数`my_mouse_callback`,传入`image`指针作为参数,这样在回调函数中可以通过这个参数访问到当前图像。 4. 进入主循环,持续显示`temp`图像并监听键盘输入。如果按下ESC键,则退出程序。 5. 在循环中,首先复制`image`到`temp`,然后检查`drawing_box`状态。如果处于绘制状态,就调用`draw_box`函数在`temp`上绘制矩形。`draw_box`函数使用`cvRectangle`函数绘制矩形,指定矩形的顶点、颜色和线宽。 6. `my_mouse_callback`函数根据鼠标事件类型执行不同操作。当鼠标移动时,如果`drawing_box`为真,更新矩形的宽度和高度;当左键单击时,记录起始点(`drawing_box`变为true);当左键释放时,结束绘制(`drawing_box`变为false)。 通过这段代码,用户可以在"boxexample"窗口上通过鼠标拖动来选择矩形区域,释放鼠标后,矩形将被绘制在图像上。这个功能可以应用于各种图像处理任务,比如对象选择、裁剪等。了解如何处理鼠标事件对于开发基于OpenCV的交互式图像应用是非常重要的。