opencv轮廓发现最小外接圆原理
时间: 2024-05-11 08:12:11 浏览: 35
OpenCV中的轮廓是一组连续的点,表示边界的形状。最小外接圆是指能够将轮廓完全覆盖住的最小圆形。
在OpenCV中,可以使用函数minEnclosingCircle()来计算轮廓的最小外接圆。这个函数接受一个轮廓作为输入,并返回一个圆形的中心点和半径。
计算最小外接圆的原理是通过找到能够覆盖住所有轮廓点的最小圆形。可以采用一些优化算法来快速计算最小外接圆,比如Welzl算法和Kasa算法等。
相关问题
C++opencv轮廓最小外接圆
在C++中使用OpenCV库进行轮廓最小外接圆的计算,可以按照以下步骤进行:
1. 首先读取图像并进行预处理,例如二值化、平滑等。
2. 使用findContours函数找到图像中的轮廓并存储在一个vector容器中。
3. 对每个轮廓,使用minEnclosingCircle函数计算最小外接圆的圆心和半径。
4. 可以使用circle函数绘制出最小外接圆。
下面是一个示例代码:
```c++
#include <opencv2/opencv.hpp>
#include <iostream>
using namespace std;
using namespace cv;
int main()
{
// 读取图像并进行预处理
Mat src = imread("test.jpg");
Mat gray, binary;
cvtColor(src, gray, COLOR_BGR2GRAY);
threshold(gray, binary, 0, 255, THRESH_BINARY | THRESH_OTSU);
imshow("binary", binary);
// 查找轮廓并存储
vector<vector<Point> > contours;
vector<Vec4i> hierarchy;
findContours(binary, contours, hierarchy, RETR_TREE, CHAIN_APPROX_SIMPLE, Point());
// 对每个轮廓计算最小外接圆
Mat drawing = Mat::zeros(binary.size(), CV_8UC3);
for (size_t i = 0; i < contours.size(); i++)
{
Point2f center;
float radius;
minEnclosingCircle(contours[i], center, radius);
// 绘制最小外接圆
circle(drawing, center, (int)radius, Scalar(0, 0, 255), 2);
}
imshow("result", drawing);
waitKey(0);
return 0;
}
```
运行程序后,会显示原始图像和最小外接圆的绘制结果。
opencv c++获取轮廓的最小外接矩形
在OpenCV C++中,可以使用minAreaRect函数获取轮廓的最小外接矩形。该函数的参数是一个轮廓,返回一个RotatedRect类型的对象,表示该轮廓的最小外接矩形。可以通过调用RotatedRect对象的points函数获取该矩形的四个顶点,然后使用line函数绘制出矩形的每条边。另外,boundingRect函数可以获取轮廓的外接矩形,rectangle函数可以绘制出该矩形。如果需要绘制最小外接圆,可以使用minEnclosingCircle函数。