OpenCV C++: 轮廓特征分析大全

作者:新兰2024.01.18 04:00浏览量:6

简介:本文将详细介绍如何使用OpenCV的findContours()函数进行轮廓特征分析,包括计算面积、周长、几何矩、质心、凸包、最小外接矩形、最小外接三角形和最小外接椭圆等。我们将通过实例和图表来解释这些概念,并提供可操作的代码示例。

千帆应用开发平台“智能体Pro”全新上线 限时免费体验

面向慢思考场景,支持低代码配置的方式创建“智能体Pro”应用

立即体验

在计算机视觉中,轮廓分析是一种重要的技术,用于提取图像中的形状和结构。OpenCV库提供了强大的轮廓分析工具,其中最常用的函数是findContours()。通过这个函数,我们可以提取图像中的轮廓,并进一步计算各种轮廓特征。
以下是使用OpenCV的C++ API进行轮廓特征分析的详细指南:
1. 轮廓提取
首先,我们需要使用findContours()函数从二值图像中提取轮廓。这个函数的输出是一个轮廓列表,每个轮廓都是点集的形式。

  1. cv::Mat image = cv::imread('image.png', cv::IMREAD_GRAYSCALE);
  2. cv::threshold(image, image, 127, 255, cv::THRESH_BINARY);
  3. std::vector<std::vector<cv::Point>> contours;
  4. cv::findContours(image, contours, cv::RETR_EXTERNAL, cv::CHAIN_APPROX_SIMPLE);

2. 计算面积和周长
每个轮廓都可以计算其面积和周长。面积是轮廓内部像素点的数量,而周长是轮廓边界的总长度。

  1. for (size_t i = 0; i < contours.size(); i++) {
  2. double area = cv::contourArea(contours[i]);
  3. double perimeter = cv::arcLength(contours[i], true);
  4. // 处理每个轮廓的面积和周长
  5. }

3. 计算几何矩
几何矩是描述轮廓形状的重要参数。通过计算轮廓的三个主轴方向上的几何矩,可以获取关于形状的更多信息。

  1. cv::Moments mom = cv::moments(contours[i]);
  2. double area = mom.m00; // 面积
  3. double x_c = mom.m10 / mom.m00; // 质心x坐标
  4. double y_c = mom.m01 / mom.m00; // 质心y坐标
  5. double moment_20 = mom.m20 / mom.m00; // 横轴上的矩
  6. double moment_02 = mom.m02 / mom.m00; // 纵轴上的矩
  7. double moment_11 = mom.m11 / mom.m00; // 斜轴上的矩

4. 计算质心
质心是轮廓的重心。对于简单的几何形状,质心和形心非常接近。

  1. cv::Point center(x_c, y_c); // 质心坐标

5. 计算凸包
凸包是包含轮廓的最小凸多边形。可以使用convexHull()函数计算凸包。

  1. std::vector<cv::Point> hull;
  2. cv::convexHull(contours[i], hull); // 计算凸包点集

6. 最小外接矩形
最小外接矩形是与轮廓边界相切的最大的矩形。可以使用minAreaRect()函数找到最小外接矩形。

  1. cv::RotatedRect rect = cv::minAreaRect(contours[i]); // 最小外接矩形对象
  2. cv::Point2f vertices[4]; rect.points(vertices); // 获取矩形四个顶点坐标
article bottom image

相关文章推荐

发表评论