OpenCV结构分析与形状描述符(20)计算一个包围给定点集的最小外接圆函数minEnclosingCircle()的使用
- 操作系统:ubuntu22.04
- OpenCV版本:OpenCV4.9
- IDE:Visual Studio Code
- 编程语言:C++11
算法描述
找到一个包围二维点集的最小面积的圆。
该函数使用迭代算法来寻找一个二维点集的最小外接圆。这意味着函数将会通过反复逼近的过程来计算出能够包围所有给定点且面积最小的圆。
minEnclosingCircle 是 OpenCV 库中的一个函数,用于计算一个包围给定点集的最小外接圆。这个函数非常有用,尤其是在计算机视觉和图像处理中,当需要找到一组点的几何中心及其覆盖半径时。
函数原型
void cv::minEnclosingCircle
(
InputArray points,
Point2f & center,
float & radius
)
参数
- 参数points 输入的二维点向量,存储在 std::vector<> 或 Mat 中。
- 参数center 输出的圆的中心。
- 参数radius 输出的圆的半径。
代码示例
include <opencv2/opencv.hpp>
#include <vector>
int main()
{
// 创建一个空白的图像
cv::Mat image = cv::Mat::zeros( 300, 300, CV_8UC3 );
// 构造一个包含多个点的向量
std::vector< cv::Point2f > points;
points.push_back( cv::Point2f( 100, 100 ) );
points.push_back( cv::Point2f( 200, 100 ) );
points.push_back( cv::Point2f( 150, 150 ) );
points.push_back( cv::Point2f( 100, 200 ) );
points.push_back( cv::Point2f( 200, 200 ) );
// 定义输出变量
cv::Point2f center;
float radius;
// 计算最小外接圆
cv::minEnclosingCircle( points, center, radius );
// 绘制点集
for ( const auto& pt : points )
{
cv::circle( image, pt, 3, cv::Scalar( 0, 255, 0 ), -1 ); // 绘制绿色的小圆圈表示点
}
// 绘制最小外接圆
cv::circle( image, center, static_cast< int >( radius ), cv::Scalar( 0, 0, 255 ), 2 ); // 绘制红色的外接圆
// 显示图像
cv::imshow( "Min Enclosing Circle", image );
cv::waitKey( 0 );
return 0;
}