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());
}

相关推荐
好开心啊没烦恼几秒前
Python 数据分析:numpy,说人话,说说数组维度。听故事学知识点怎么这么容易?
开发语言·人工智能·python·数据挖掘·数据分析·numpy
生态遥感监测笔记7 分钟前
GEE利用已有土地利用数据选取样本点并进行分类
人工智能·算法·机器学习·分类·数据挖掘
天天扭码35 分钟前
从图片到语音:我是如何用两大模型API打造沉浸式英语学习工具的
前端·人工智能·github
Tony沈哲36 分钟前
macOS 上为 Compose Desktop 构建跨架构图像处理 dylib:OpenCV + libraw + libheif 实践指南
opencv·算法
张彦峰ZYF1 小时前
从检索到生成:RAG 如何重构大模型的知识边界?
人工智能·ai·aigc
刘海东刘海东1 小时前
结构型智能科技的关键可行性——信息型智能向结构型智能的转变(修改提纲)
人工智能·算法·机器学习
**梯度已爆炸**2 小时前
NLP文本预处理
人工智能·深度学习·nlp
胖大和尚2 小时前
clang 编译器怎么查看在编译过程中做了哪些优化
c++·clang
uncle_ll2 小时前
李宏毅NLP-8-语音模型
人工智能·自然语言处理·语音识别·语音模型·lm
Liudef062 小时前
FLUX.1-Kontext 高效训练 LoRA:释放大语言模型定制化潜能的完整指南
人工智能·语言模型·自然语言处理·ai作画·aigc