首页 > 其他分享 >OpenCV(一) | contourArea()求得的面积是哪里的面积?

OpenCV(一) | contourArea()求得的面积是哪里的面积?

时间:2022-08-19 17:56:31浏览次数:65  
标签:contourArea 140 面积 注释 OpenCV 添加 图片

​ 本文来自公众号”AI大道理“。 这里即有AI,也有大道理。   1、问题描述:轮廓的面积contourArea()得出一个面积,后面利用宽*高得出一个面积,两个面积结果不一样。统计发现前者面积永远小于后者面积。   添加图片注释,不超过 140 字(可选) ​   ​   添加图片注释,不超过 140 字(可选) ​ 2、contourArea() findContours() 提取轮廓, contourArea() 计算轮廓面积。 ContourArea计算轮廓的面积使用格林公式。 格林公式是什么? 在高数的曲线曲面积分部分,格林公式、高斯公式和斯托克斯公式是三个十分十分重要的公式,利用这三个公式可以将复杂的积分转化为我们比较熟悉的积分进行解决。 格林公式的应用是有条件的:封闭且正向、被积函数在D上是连续的。   添加图片注释,不超过 140 字(可选) ​ 为什么要用格林公式计算? 格林公式可以求解第二型的曲线积分,即曲面面积。   添加图片注释,不超过 140 字(可选) ​ 因此,opencv的函数ContourArea()是在求不规则的曲面面积。 实际上它在求下图白色区域的面积。   ​   添加图片注释,不超过 140 字(可选)     ​   添加图片注释,不超过 140 字(可选) ​ 3、几何面积 宽*高的面积是矩形的面积。 Rect selection = boundingRect(contours[t]) 是在这个白色的区域外面画出一个最小矩形。 因此area=selection.width * selection.height求的面积是红色矩形的面积。   添加图片注释,不超过 140 字(可选) ​ 所以才使得contourArea()求出来的面积和宽高面积不一样,且永远小于看宽高面积。     ​   添加图片注释,不超过 140 字(可选) ​ 4、真实面积 上述ContourArea()面积比最小外接矩形的面积小很好理解。 但问题是,ContourArea()求得得面积居然比真实面积还要小,也就是比白色区域得面积要小。 这又是怎么回事呢? 原来ContourArea()是取连通域边界像素中心点,连接起来,成为一个轮廓,导致一周得边界像素点丢失,即求得得面积比真实得面积少了一圈。 比如下图,真实面积4*4=16,而ContourArea()则只是算红线内得面积,只有3*3=9。   添加图片注释,不超过 140 字(可选) ​ 因此,countArea() 函数也会 ”有中去无“,视而不见,算出来的轮廓面积会出现0。 有轮廓,但是面积为0。(不是见鬼了) 比如有的轮廓厚度只有两像素,都是边缘线,那计算出来的面积就等于0。   ​   添加图片注释,不超过 140 字(可选) ​ ​   添加图片注释,不超过 140 字(可选) ​ 4、总结 contourArea()求的是封闭曲线内面积,几何面积求的是最小外接矩的面积。 所以才使得contourArea()求出来的面积和宽高面积不一样,且永远小于看宽高面积。 由于在计算面积得时候丢失了外围像素,因此contourArea()求出来的面积比真实面积要小。 (一开始误以为contourArea()是在求红色线条内线条所包含的面积,而几何面积是在计算红色线条外线条所包含的面积。因为线条是有粗细的,实际中用的2即两个像素点画这个红色矩形。所以前者面积永远小于后者面积。但是,求证后发现,即使减掉线条的粗细,求得的面积还是对应不上。)       ​   添加图片注释,不超过 140 字(可选) ​ —————— 浅谈则止,细致入微AI大道理 扫描下方“AI大道理”,选择“关注”公众号 —————————————————————   —————————————————————   公众号《AI大道理》征稿函​mp.weixin.qq.com/s?__biz=MzU5NTg2MzIxMw==&mid=2247489802&idx=1&sn=228c18ad3a11e731e8f325821c184a82&chksm=fe6a2ac8c91da3dec311bcde280ad7ee760c0c3e08795604e0f221ff23c89c43a86c6355390f&scene=21#wechat_redirect | 留言吧​mp.weixin.qq.com/cgi-bin/appmsg?t=media/appmsg_edit&action=edit&type=77&appmsgid=100007880&token=813891562&lang=zh_CN   ​

标签:contourArea,140,面积,注释,OpenCV,添加,图片
From: https://www.cnblogs.com/AIBigTruth/p/16602868.html

相关文章

  • Mac - 编译OpenCV
    简介简单记录Mac下编译OpenCV。 使用HomeBrew安装cmakebrewinstallcmake 获取OpenCV源代码官网地址:https://opencv.org/releases/选择Sources下载 编译O......
  • P5681 [CSP-J2019 江西] 面积
    题目描述Alice有一个边长为 aa 的正方形,Bob有一个长宽分别为 b,cb,c 的矩形,请你告诉他们俩谁的图形面积更大。输入格式仅一行三个正整数 a,b,ca,b,c输出格......
  • C#-OpenCvSharp中MatType
    本文链接:https://blog.csdn.net/qq_48705696/article/details/109745779 1、bit_depth---比特数---代表8bite,16bites,32bites,64bites---举个例子吧--比如说:如......
  • C#-OpenCvSharp图像的归一化
    本文链接:https://blog.csdn.net/qq_48705696/article/details/109891213什么是归一化?归一化就是要把需要处理的数据经过处理后(通过某种算法)限制在你需要的一定范围内。......
  • C#-OpenCvSharp二值化阈值
    本文链接:https://blog.csdn.net/qq_40344307/article/details/90741857Matpanda=Cv2.ImRead("panda.png",ImreadModes.Grayscale);//必须为灰度图单通道//1.简单阈值......
  • opencv中XML文件的读与写
    opencv中XML文件的读与写OpenCV中有相关的函数对XML文件进行写与读的操作,FileStoragefs("../xml/read.xml",FileStorage::WRITE);FileStoragefs2("../xml/read.xml",......
  • opencv4.x 中的plot函数绘制二维Mat
     发现一个好玩的二维图像绘制函数,与大家共同欣赏:)参考网址:OpenCV4入门061:使用plot2d绘制折线图-食铁兽(feater.top) 头文件:#include<opencv2/plot.hpp>动态库:-l......
  • C#-OpenCvSharp查找遍历轮廓范围内的点
    privateMatGoFindContours(Matmat,stringname,outMat[]countoursMat){countoursMat=null;MatuseLessMat=newMat();MatGray;MatBgr;......
  • acwing 1228. 油漆面积 扫描线
     X星球的一批考古机器人正在一片废墟上考古。该区域的地面坚硬如石、平整如镜。管理人员为方便,建立了标准的直角坐标系。每个机器人都各有特长、身怀绝技。它们感兴......
  • [ 模板 ] 求凸包面积
    先求凸constintN=1e6;structPoint{doublex,y;doubleoperator^(constPoint&b)const{returnx*b.y-y*b.x;}};Pointstackk[N];......