opencv c++鼠标拖动任意画多个圆并同时显示多个圆
时间: 2023-06-13 17:07:16 浏览: 41
实现该功能可以分为两步:一是在鼠标事件中获取鼠标拖动的坐标,并绘制圆形;二是在画布上显示多个圆形。
以下是一个简单的示例代码:
```c++
#include <opencv2/opencv.hpp>
#include <iostream>
#include <vector>
using namespace cv;
using namespace std;
// 定义全局变量,用于保存鼠标拖动的坐标
vector<Point> points;
// 鼠标事件回调函数
void onMouse(int event, int x, int y, int flags, void* userdata)
{
if (event == EVENT_LBUTTONDOWN) // 鼠标左键按下事件
{
points.push_back(Point(x, y)); // 将鼠标坐标添加到全局变量中
}
else if (event == EVENT_MOUSEMOVE && (flags & EVENT_FLAG_LBUTTON)) // 鼠标拖动事件
{
points.push_back(Point(x, y)); // 将鼠标坐标添加到全局变量中
}
}
int main()
{
Mat image(500, 500, CV_8UC3, Scalar(255, 255, 255)); // 创建画布
namedWindow("image");
setMouseCallback("image", onMouse, NULL); // 设置鼠标事件回调函数
while (true)
{
Mat temp = image.clone(); // 复制画布,用于绘制圆形
for (int i = 0; i < points.size(); i++)
{
circle(temp, points[i], 10, Scalar(0, 0, 255), -1); // 绘制圆形
}
imshow("image", temp); // 显示画布上的圆形
if (waitKey(30) == 27) // 等待ESC键退出
{
break;
}
}
return 0;
}
```
运行代码后,可以在画布上拖动鼠标绘制多个圆形,并且每个圆形都会随着鼠标的移动而改变位置。
相关推荐
![gz](https://img-home.csdnimg.cn/images/20210720083447.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)