opencv c++鼠标拖动任意画多个圆并同时显示多个圆
时间: 2023-06-13 16:07:19 浏览: 101
你可以使用OpenCV的鼠标事件和画图函数来实现这个功能。下面是一个简单的示例代码:
```c++
#include <iostream>
#include <opencv2/opencv.hpp>
using namespace std;
using namespace cv;
vector<Point> points; // 存储圆心点的向量
void onMouse(int event, int x, int y, int flags, void* param)
{
if (event == EVENT_LBUTTONDOWN)
{
points.push_back(Point(x, y)); // 添加新的圆心点
}
}
int main()
{
Mat img(500, 500, CV_8UC3, Scalar(255, 255, 255)); // 创建一个空白图像
namedWindow("image");
setMouseCallback("image", onMouse, NULL);
while (true)
{
Mat output = img.clone(); // 克隆图像
for (int i = 0; i < points.size(); i++)
{
circle(output, points[i], 30, Scalar(0, 0, 255), 2); // 在每个圆心点上画圆
}
imshow("image", output);
if (waitKey(30) == 27) // 按下ESC键退出循环
break;
}
return 0;
}
```
在这个示例中,我们定义了一个全局的`vector<Point> points`,用于存储所有的圆心点。然后,在`onMouse`回调函数中,当鼠标左键按下时,我们将当前的坐标作为一个新的圆心点添加到向量中。在主循环中,我们使用`circle`函数在每个圆心点上画圆,并将结果显示在窗口中。最后,我们使用`waitKey`函数等待用户按下ESC键退出循环。
你可以根据需要调整圆的半径、颜色和线宽等参数来实现你想要的效果。
阅读全文