opencv c++鼠标拖动任意画多个圆并同时显示多个圆
时间: 2023-06-13 16:07:25 浏览: 97
基于C++OpenCV实现的直线检测、圆检测.zip
5星 · 资源好评率100%
以下是一个基本的示例代码,可以让您在 OpenCV C++ 中使用鼠标拖动任意画多个圆并同时显示多个圆:
```cpp
#include <opencv2/opencv.hpp>
using namespace cv;
// 定义全局变量
Mat image;
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_LBUTTONUP)
{
// 画圆
circle(image, points.back(), 10, Scalar(0, 0, 255), -1);
// 显示圆
imshow("image", image);
}
}
int main()
{
// 创建一个黑色的图像
image = Mat::zeros(500, 500, CV_8UC3);
// 显示图像
imshow("image", image);
// 设置鼠标事件回调函数
setMouseCallback("image", onMouse, 0);
// 等待按键事件
waitKey(0);
return 0;
}
```
在这个示例中,我们首先创建了一个黑色的图像,然后在 `onMouse` 回调函数中处理鼠标事件。当鼠标左键按下时,我们将当前坐标点存储在 `points` 向量中。当鼠标左键释放时,我们使用最后一个点的坐标 `points.back()` 画了一个半径为 10 的圆,并将它添加到图像中,然后显示图像。
您可以在 `points` 向量中存储每个圆心的坐标,可以在 `onMouse` 回调函数中使用这些点来画多个圆。如果您需要更复杂的功能,例如拖动圆或在图像中添加文本,请参阅 OpenCV 文档或其他示例。
阅读全文