opencv c++鼠标拖动任意画多个圆并同时显示多个圆'
时间: 2023-06-13 19:06:49 浏览: 83
可以使用OpenCV的鼠标回调函数来实现鼠标拖动任意画多个圆的功能。下面是一个简单的示例代码:
```c++
#include <opencv2/opencv.hpp>
#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 == CV_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 img_show = img.clone();
for (int i = 0; i < points.size(); i++) // 遍历向量中的圆心点
{
circle(img_show, points[i], 20, Scalar(0, 0, 255), 2); // 在图像上绘制圆
}
imshow("image", img_show);
int key = waitKey(30);
if (key == 27) // 按下ESC键退出程序
break;
}
return 0;
}
```
在上面的代码中,我们创建了一个空白的500x500的彩色图像,并设置了一个鼠标回调函数onMouse。当用户按下鼠标左键时,回调函数将会把当前鼠标的坐标作为圆心点添加到向量points中。在主循环中,我们遍历points向量中的圆心点,并在图像上绘制出来。最后,我们显示图像并等待用户按下ESC键退出程序。
运行上面的代码,你可以通过拖动鼠标在图像上画出多个圆,并同时显示多个圆。
阅读全文