OpenCV-计算轮廓周长cv::arcLength

简介: OpenCV-计算轮廓周长cv::arcLength

函数原型

double arcLength( InputArray curve, bool closed );

参数说明

  1. InputArray类型的curve,输入的向量,二维点(轮廓顶点),可以为std::vector或Mat类型。
  2. bool类型的closed,用于指示曲线是否封闭的标识符,一般设置为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 length = cv::arcLength(*itc,true);
      cout << "  " << "第" << i << "个轮廓的周长为:" << length << endl << endl;
      i++;
      itc++;
    }
  }
  imshow("A", A);
  waitKey(0);
  system("pause");
  return 0;
}

测试效果

图1 示例图

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

图2 周长结果图

      注意:计算轮廓的周长值是按照轮廓的实际长度进行计算的,按第三个轮廓举例,将其放大至像素级别,如图3所示。

图3 轮廓示意图

     寻找轮廓时,取的点为像素中心点,连接起来的黑线就是这个图形的轮廓,那么计算的周长应该是4个对角+4个三角(4*2+4*2*≈19.313708499),与计算机输出的结果一致。

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

相关文章
|
4月前
|
计算机视觉 Python
OpenCV轮廓拟合与凸包的讲解与实战应用(附Python源码)
OpenCV轮廓拟合与凸包的讲解与实战应用(附Python源码)
57 0
|
4月前
|
算法 计算机视觉 开发者
OpenCV图形检测中绘制图像的轮廓讲解与实战应用(附Python源码)
OpenCV图形检测中绘制图像的轮廓讲解与实战应用(附Python源码)
61 0
|
1月前
|
计算机视觉
OpenCV(三十四):轮廓外接最大、最小矩形和多边形拟合
OpenCV(三十四):轮廓外接最大、最小矩形和多边形拟合
81 0
|
1月前
|
计算机视觉
OpenCV(三十三):计算轮廓面积与轮廓长度
OpenCV(三十三):计算轮廓面积与轮廓长度
55 0
|
1月前
|
计算机视觉 索引
OpenCV(三十二):轮廓检测
OpenCV(三十二):轮廓检测
20 0
|
4月前
[C++&OpenCv] 两点距离、三点角度的计算
[C++&OpenCv] 两点距离、三点角度的计算
43 0
|
4月前
|
计算机视觉
[QT5&OpenCV] 边缘检测、轮廓提取及轮廓跟踪
[QT5&OpenCV] 边缘检测、轮廓提取及轮廓跟踪
100 0
|
2月前
|
监控 API 计算机视觉
OpenCV这么简单为啥不学——1.3、图像缩放resize函数
OpenCV这么简单为啥不学——1.3、图像缩放resize函数
42 0
|
18天前
|
编解码 计算机视觉 Python
opencv 图像金字塔(python)
opencv 图像金字塔(python)
|
1月前
|
存储 计算机视觉
OpenCV(三十九):积分图像
OpenCV(三十九):积分图像
18 0