OpenCV C++: 轮廓特征分析大全
2024.01.18 04:00浏览量:6简介:本文将详细介绍如何使用OpenCV的findContours()函数进行轮廓特征分析,包括计算面积、周长、几何矩、质心、凸包、最小外接矩形、最小外接三角形和最小外接椭圆等。我们将通过实例和图表来解释这些概念,并提供可操作的代码示例。
千帆应用开发平台“智能体Pro”全新上线 限时免费体验
面向慢思考场景,支持低代码配置的方式创建“智能体Pro”应用
在计算机视觉中,轮廓分析是一种重要的技术,用于提取图像中的形状和结构。OpenCV库提供了强大的轮廓分析工具,其中最常用的函数是findContours()。通过这个函数,我们可以提取图像中的轮廓,并进一步计算各种轮廓特征。
以下是使用OpenCV的C++ API进行轮廓特征分析的详细指南:
1. 轮廓提取
首先,我们需要使用findContours()函数从二值图像中提取轮廓。这个函数的输出是一个轮廓列表,每个轮廓都是点集的形式。
cv::Mat image = cv::imread('image.png', cv::IMREAD_GRAYSCALE);
cv::threshold(image, image, 127, 255, cv::THRESH_BINARY);
std::vector<std::vector<cv::Point>> contours;
cv::findContours(image, contours, cv::RETR_EXTERNAL, cv::CHAIN_APPROX_SIMPLE);
2. 计算面积和周长
每个轮廓都可以计算其面积和周长。面积是轮廓内部像素点的数量,而周长是轮廓边界的总长度。
for (size_t i = 0; i < contours.size(); i++) {
double area = cv::contourArea(contours[i]);
double perimeter = cv::arcLength(contours[i], true);
// 处理每个轮廓的面积和周长
}
3. 计算几何矩
几何矩是描述轮廓形状的重要参数。通过计算轮廓的三个主轴方向上的几何矩,可以获取关于形状的更多信息。
cv::Moments mom = cv::moments(contours[i]);
double area = mom.m00; // 面积
double x_c = mom.m10 / mom.m00; // 质心x坐标
double y_c = mom.m01 / mom.m00; // 质心y坐标
double moment_20 = mom.m20 / mom.m00; // 横轴上的矩
double moment_02 = mom.m02 / mom.m00; // 纵轴上的矩
double moment_11 = mom.m11 / mom.m00; // 斜轴上的矩
4. 计算质心
质心是轮廓的重心。对于简单的几何形状,质心和形心非常接近。
cv::Point center(x_c, y_c); // 质心坐标
5. 计算凸包
凸包是包含轮廓的最小凸多边形。可以使用convexHull()函数计算凸包。
std::vector<cv::Point> hull;
cv::convexHull(contours[i], hull); // 计算凸包点集
6. 最小外接矩形
最小外接矩形是与轮廓边界相切的最大的矩形。可以使用minAreaRect()函数找到最小外接矩形。
cv::RotatedRect rect = cv::minAreaRect(contours[i]); // 最小外接矩形对象
cv::Point2f vertices[4]; rect.points(vertices); // 获取矩形四个顶点坐标

发表评论
登录后可评论,请前往 登录 或 注册