• 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.示例代码

    1. //计算轮廓面积与长度
    2. void Contour_areaAndlength(Mat image){
    3. Mat gray,binary;
    4. cvtColor(image,gray,COLOR_BGR2GRAY);//灰度化
    5. GaussianBlur(gray,gray,Size(9,9),2,2);//滤波
    6. threshold(gray,binary,170,255,THRESH_BINARY|THRESH_OTSU);//自适应二值化
    7. //轮廓检测
    8. vector<vector<Point>> contours;//轮廓
    9. vector<Vec4i> hierarchy;//存放轮廓结构变量
    10. findContours(binary,contours,hierarchy,RETR_TREE,CHAIN_APPROX_SIMPLE,Point());
    11. ostringstream ss;
    12. //输出轮廓面积
    13. for(int t=0;t<contours.size();t++){
    14. double areal= contourArea(contours[t]);
    15. ss <<"第"<< t<<"轮廓面积:"<<areal<<std::endl;
    16. }
    17. //输出轮廓长度
    18. for(int t=0;t<contours.size();t++){
    19. double length2= arcLength(contours[t],true);
    20. ss <<"第"<< t<<"轮廓长度:"<<length2<<std::endl;
    21. }
    22. LOGD("%s",ss.str().c_str());
    23. }

  • 相关阅读:
    tomcat架构概览
    性能测试的软件------loadrunner
    Apache网页优化
    python实现全局变量共享,一个全局变量在多个文件中使用
    切换挂载盘
    重学c/c++之数据存储
    FPGA Quartus IP核 打开使用
    拼多多Temu正式卷到巴西,买家和卖家又多了一个选择!
    【算法】游戏中的学习,使用c#面向对象特性控制游戏角色移动
    变量、运算符、表达式、输入与输出
  • 原文地址:https://blog.csdn.net/weixin_63357306/article/details/132787963