opencv c++鼠标拖动任意画多个圆并显示
时间: 2023-06-14 16:05:25 浏览: 87
opencv画圆
以下是一个简单的 OpenCV C++ 示例代码,可以让您通过鼠标拖动在图像上画多个圆并显示:
```c++
#include <opencv2/opencv.hpp>
#include <iostream>
#include <vector>
using namespace cv;
using namespace std;
// 定义全局变量
Mat image;
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)); // 记录鼠标点击的位置
}
else if (event == EVENT_LBUTTONUP)
{
points.push_back(Point(x, y)); // 记录鼠标释放的位置
circle(image, points.back(), norm(points.front() - points.back()), Scalar(0, 0, 255), 2); // 画圆
imshow("image", image); // 显示图像
}
}
int main()
{
// 加载图像
image = imread("test.jpg");
if (image.empty())
{
cout << "Could not open or find the image" << endl;
return -1;
}
// 创建窗口并注册鼠标回调函数
namedWindow("image", WINDOW_AUTOSIZE);
setMouseCallback("image", onMouse, 0);
// 显示图像
imshow("image", image);
// 等待按键按下
waitKey(0);
return 0;
}
```
在此代码中,我们首先加载了一张图像,并创建了一个名为 "image" 的窗口。然后,我们使用 setMouseCallback() 函数注册了一个鼠标回调函数 onMouse(),以便在用户按下和释放鼠标时记录鼠标的位置,并在图像上画圆。最后,我们在窗口中显示图像,并等待按键按下以退出程序。
注意,上述代码只是一个简单的示例,没有进行错误处理和优化。在实际应用中,您需要根据您的需求进行修改和完善。
阅读全文