OpenCV——计算轮廓长度/周长和面积

轮廓面积

轮廓面积是指每个轮廓中所有的像素点围成区域的面积,单位为像素。

double contourArea( InputArray contour, bool oriented = false );
  • contour:轮廓的像素点
  • oriented:区域面积是否具有方向的标志,true表示面积具有方向性,false表示不具有方向性,默认值为不具有方向性的false。

函数的返回值是统计轮廓面积的结果,数据类型为double。函数第一个参数表示轮廓的像素点,数据类型为vector或者Mat,相邻的两个像素点之间逐一相连构成的多边形区域即为轮廓面积的统计区域。连续的三个像素点之间的连线有可能在同一条直线上,因此为了减少输入轮廓像素点的数目,可以只输入轮廓的顶点像素点,例如一个三角形的轮廓,轮廓中可能具有每一条边上的所有像素点,但是在统计面积时可以只输入三角形的三个顶点。函数第二个参数是区域面积是否具有方向的标志,参数为true时表示统计的面积具有方向性,轮廓顶点顺时针给出和逆时针给出时统计的面积互为相反数;参数为false时表示统计的面积不具有方向性,输出轮廓面积的绝对值。 

轮廓长度 /周长

double arcLength( InputArray curve, bool closed );
  • curve:轮廓或者曲线的2D像素点。
  • closed:轮廓或者曲线是否闭合标志,true表示闭合。

该函数能够统计轮廓或者曲线的长度,函数返回值为统计长度,单位为像素,数据类型为double。函数的第一个参数是轮廓或者曲线的2D像素点,数据类型为vector或者Mat。函数的第二个参数是轮廓或者曲线是否闭合的标志,true表示闭合。

函数统计的长度是轮廓或者曲线相邻两个像素点之间连线的距离,例如计算三角形三个顶点A、B和C构成的轮廓长度时,并且函数第二个参数为true时,统计的长度是三角形三个边AB、BC和CA的长度之和;当参数为false时,统计的长度是由A到C三个点之间依次连线的距离长度之和,即AB和BC的长度之和。

简单示例

//
// Created by smallflyfly on 2021/6/22.
//

#include "opencv2/opencv.hpp"
#include <iostream>

using namespace std;
using namespace cv;

int main() {
    Mat im = imread("rice.jfif");
    resize(im, im, Size(0, 0), 0.5, 0.5);
    Mat gray;
    cvtColor(im, gray, CV_BGR2GRAY);

    Mat imBin;
    threshold(gray, imBin, 125, 255, THRESH_BINARY);

    vector<vector<Point>> contours;
    findContours(imBin, contours, RETR_EXTERNAL, CHAIN_APPROX_NONE);
    drawContours(im, contours, -1, Scalar(255, 0, 255));

    for (int i = 0; i < contours.size(); ++i) {
        double area = contourArea(contours[i]);
        double length = arcLength(contours[i], true);
        cout << "area: " << area << " " << "length: " << length << endl;
    }
    
    imshow("im", im);

    waitKey(0);
    destroyAllWindows();

    return 0;

}

  • 6
    点赞
  • 74
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值