OpenCV(三十三):计算轮廓面积与轮廓长度

1.介绍轮廓面积与轮廓长度

轮廓面积(Contour Area)是指轮廓所包围的区域的总面积。通常情况下,轮廓面积的单位是像素的平方。

轮廓长度(Contour Length)又称周长(Perimeter),表示轮廓的闭合边界的长度。轮廓的边界可以看作是由一系列相邻像素点组成的连续路径,轮廓长度即为该路径的总长度。通常情况下,轮廓长度的单位是像素。

2.轮廓面积 contourArea()

double cv::contourArea ( InputArray contour,

bool oriented = false

)

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

3.轮廓长度arcLength()

double cv::arcLength ( InputArray curve,

bool closed

)

  • curve:轮廓或者曲线的2D像素点。
  • closed:轮廓或者曲线是否闭合标志,true表示闭合。

4.示例代码

复制代码
//计算轮廓面积与长度
void Contour_areaAndlength(Mat image){
    Mat gray,binary;
    cvtColor(image,gray,COLOR_BGR2GRAY);//灰度化
    GaussianBlur(gray,gray,Size(9,9),2,2);//滤波
    threshold(gray,binary,170,255,THRESH_BINARY|THRESH_OTSU);//自适应二值化
    //轮廓检测
    vector<vector<Point>> contours;//轮廓
    vector<Vec4i> hierarchy;//存放轮廓结构变量
    findContours(binary,contours,hierarchy,RETR_TREE,CHAIN_APPROX_SIMPLE,Point());
    ostringstream ss;
    //输出轮廓面积
    for(int t=0;t<contours.size();t++){
        double areal= contourArea(contours[t]);
        ss <<"第"<< t<<"轮廓面积:"<<areal<<std::endl;
    }
    //输出轮廓长度
    for(int t=0;t<contours.size();t++){
        double length2= arcLength(contours[t],true);
        ss <<"第"<< t<<"轮廓长度:"<<length2<<std::endl;
    }
    LOGD("%s",ss.str().c_str());
}

相关推荐
无线通信科研笔记1 分钟前
IEEE TVT 2026 论文精读与完整复现|相位误差如何重塑近场 RIS 的幅相响应
论文阅读·人工智能·python·算法·论文笔记
Devlive 开源社区5 分钟前
AuthX 正式更名 GrantForge:我们重新做了一遍权限管理系统
大数据·人工智能·架构
朝朝辞暮i11 分钟前
VLA 系统学习第 1 课:VLA 到底在干什么?
人工智能·python·计算机视觉·vla
鲲穹AI种草20 分钟前
AI 壁纸生成工具怎么选?鲲穹 AI 壁纸工具功能实测与横向对比
人工智能·壁纸生成工具
科技林总31 分钟前
向量与重排模型
人工智能
楚楚25136 分钟前
2026企业AI办公工具选型指南:落地评估与效果衡量体系
大数据·人工智能
小马9261 小时前
2026年9月30日热点速览:AI智能体大战升级、房贷贴息新政落地、硬科技多点突破
人工智能·科技·chatgpt
SPFFC189380330531 小时前
旋翼式水表工作原理智能水表工作原理
人工智能·显示器·智能手表·平板·大屏端
stormzhangV1 小时前
A 社为什么反超了
人工智能·ai编程·claude
All for pursuit.1 小时前
【位运算-1】338.比特位计数
数据结构·c++·算法·leetcode