OpenCV-计算轮廓面积cv::contourArea

简介: OpenCV-计算轮廓面积cv::contourArea

函数原型

double contourArea( InputArray contour, bool oriented = false );

参数说明

  1. InputArray类型的contour,输入的向量,二维点(轮廓顶点),可以为std::vector或Mat类型。
  2. bool类型的oriented,面向区域标识符。若其为true,会返回一个带符号的面积值,正负取决于轮廓的方向。

测试代码

#include<iostream>
#include<opencv2/opencv.hpp>
using namespace std;
using namespace cv;
int main(void)
{
  Mat A = Mat::zeros(500, 500, CV_8UC1);
  circle(A, Point2i(100, 100), 3, 255, -1);
  circle(A, Point2i(300, 400), 50, 255, -1);
  circle(A, Point2i(250, 100), 100, 255, -1);
  circle(A, Point2i(400, 300), 60, 255, -1);
  std::vector<std::vector<cv::Point> > contours;  // 创建轮廓容器
  std::vector<cv::Vec4i>  hierarchy;
  cv::findContours(A, contours, hierarchy, cv::RETR_EXTERNAL, cv::CHAIN_APPROX_NONE, cv::Point());
  if (!contours.empty() && !hierarchy.empty())
  {
    std::vector<std::vector<cv::Point> >::const_iterator itc = contours.begin();
    // 遍历所有轮廓
    int i = 1;
    while (itc != contours.end())
    {
      double area = cv::contourArea(*itc);
      cout << "第" << i << "个轮廓的面积为:" << area << endl;
      i++;
      itc++;
    }
  }
  imshow("A", A);
  waitKey(0);
  system("pause");
  return 0;
}

测试效果

图1 示例图

      如图1所示,测试代码画了4个圆,对整幅图进行轮廓统计时,从下往上,从左往右,分别标记了4个轮廓的顺序,如图2所示是4个轮廓的面积值。

图2 面积结果

      注意:计算轮廓的面积值是按照轮廓的内部面积进行计算的,按第三个轮廓举例,将其放大至像素级别,如图3所示。

图3 轮廓示意图

      寻找轮廓时,取的点为像素中心点,连接起来的黑线就是这个图形的轮廓,那么计算的面积应该是内部正方形+4个三角形(4*4+4*1=20),与计算机输出的结果一致。

      如果文章帮助到你了,可以点个赞让我知道,我会很快乐~加油!

相关文章
|
5月前
|
机器学习/深度学习 人工智能 算法
Python在计算机视觉(CV)中扮演重要角色,得益于其丰富的库如OpenCV、Pillow和Scikit-image。
【7月更文挑战第5天】Python在计算机视觉(CV)中扮演重要角色,得益于其丰富的库如OpenCV、Pillow和Scikit-image。CV涉及图像处理、模式识别和机器学习,用于图像理解和生成。Python的跨平台特性和活跃社区使其成为CV的理想工具。基本流程包括图像获取、预处理、特征提取、分类识别及图像生成。例如,面部识别通过预处理图像,使用如`cv2.CascadeClassifier`进行检测;物体检测类似,但需适应不同目标;图像生成则利用GAN创造新图像。
74 4
|
4月前
|
计算机视觉 索引
OpenCV读取视频失败<无可用信息,未为 opencv_world453.dll 加载任何符号> cv::VideoCapture
本文介绍了解决OpenCV读取视频失败的错误,指出问题通常由视频路径错误或摄像头索引错误导致,并提供了相应的解决方法。
OpenCV读取视频失败<无可用信息,未为 opencv_world453.dll 加载任何符号> cv::VideoCapture
|
4月前
|
计算机视觉
OpenCV 图像类型标识符 CV_<bit_depth><S|U|F>C<number_of_channels>
OpenCV 图像类型标识符 CV_<bit_depth><S|U|F>C<number_of_channels>
50 0
|
6月前
|
存储 编解码 算法
【Qt&OpenCV 检测图像中的线/圆/轮廓 HoughLinesP/HoughCircles/findContours&drawContours】
【Qt&OpenCV 检测图像中的线/圆/轮廓 HoughLinesP/HoughCircles/findContours&drawContours】
111 0
|
6月前
|
计算机视觉
OpenCV轮廓分析
OpenCV轮廓分析
|
6月前
|
算法 计算机视觉
【Qt&OpenCV 直方图计算 split/calcHist/normalize】
【Qt&OpenCV 直方图计算 split/calcHist/normalize】
53 0
|
6月前
|
人工智能 算法 Ubuntu
【案例实战】 基于OpenCV实现鹿茸面积计算
有人询问如何计算鹿茸蜡皮面积占比。利用OpenCV实验大师工具软件,经过图像处理步骤(包括边缘检测、轮廓识别),成功计算出两个区域的面积,展示了一步到位的OpenCV解决方案。OEMTS软件旨在促进数字图像处理教学,助力成为合格的OpenCV开发者。详情见课程链接和OEMTS安装指南。
75 0
|
7月前
|
算法 Serverless 计算机视觉
【OpenCV】- 多边形将轮廓包围
【OpenCV】- 多边形将轮廓包围
|
7月前
|
存储 计算机视觉 流计算
【OpenCV】计算视频的光流并跟踪物体calcOpticalFlowPyrLK
【OpenCV】计算视频的光流并跟踪物体calcOpticalFlowPyrLK
313 0
|
2月前
|
计算机视觉
Opencv学习笔记(三):图像二值化函数cv2.threshold函数详解
这篇文章详细介绍了OpenCV库中的图像二值化函数`cv2.threshold`,包括二值化的概念、常见的阈值类型、函数的参数说明以及通过代码实例展示了如何应用该函数进行图像二值化处理,并展示了运行结果。
534 0
Opencv学习笔记(三):图像二值化函数cv2.threshold函数详解