首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >OpenCV findContours函数时的小发现

OpenCV findContours函数时的小发现

作者头像
chaibubble
发布于 2022-11-30 05:41:28
发布于 2022-11-30 05:41:28
53700
代码可运行
举报
运行总次数:0
代码可运行

在应用opencv中findContours()函数与drawContours()函数进行滤波时,将检测到的面积小于某个值的轮廓使用drawContours()函数涂成黑色,此时在显示的图片上看不到该轮廓,但是此时的轮廓并没有在vector<vector<Point> > contours容器中删除。

实验过程:

原图为

经过一系列处理之后,利用下列代码将小于40的轮廓滤除,并将大于40的轮廓填充为白色

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
vector<vector<Point>> twocontours;
       vector<Vec4i> twohierarchy;
       findContours(result4,twocontours,twohierarchy,CV_RETR_TREE,CV_CHAIN_APPROX_SIMPLE);
       for(inti = 0; i < (int)twocontours.size();i++) 
       {
           if (int(twocontours.at(i).size())<= 40)
              {
                       drawContours(result4, twocontours, i, Scalar(0), CV_FILLED);
              }
          else
             {
              drawContours(result4,twocontours, i, Scalar(255), CV_FILLED);    
             }
       }

效果为:

此时将代码修改,在填充之后重新对counter进行填充

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 vector<vector<Point> > twocontours;
       vector<Vec4i> twohierarchy;
       findContours(result4,twocontours,twohierarchy,CV_RETR_TREE,CV_CHAIN_APPROX_SIMPLE); 
       for(inti = 0; i < (int)twocontours.size();i++) 
       {
           if (int(twocontours.at(i).size())<= 40)
              {
                       drawContours(result4, twocontours, i, Scalar(0), CV_FILLED);
              }
          else
             {
                      drawContours(result4, twocontours, i, Scalar(255), CV_FILLED);
              }
       }
       for(inti = 0; i < (int)twocontours.size();i++) 
       {
               drawContours(result4, twocontours, i,Scalar(255), CV_FILLED);
       }

效果是,之前过滤掉的面积小于40的轮廓被重新填充回来,说明容器counter本身不会受到drawContours函数填充的影响。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2016-10-19,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
OpenCV 轮廓检测
http://blog.sina.com.cn/s/blog_8fc98fe501017ypb.html
流川疯
2022/11/29
1K0
OpenCV 轮廓检测
OpenCV 对轮廓的绘图与筛选操作总结
OpenCV利用findContours找到图像中的轮廓,根据这些轮廓的特征进行筛选有利于进一步逼近最终的兴趣区域,减少其他算法的时间,提高代码的运行效率,而对轮廓的绘图则可以直观的看到筛选结果。 其
chaibubble
2018/01/02
4.7K0
OpenCV  对轮廓的绘图与筛选操作总结
OpenCV findContours函数边缘近似方法
在使用OpenCV的过程中,findcontours是相对使用比较多的,在之前的博客中,介绍了vector<vector<Point> > contours容器: http://blog.csdn.net/chaipp0607/article/details/52858661 查找轮廓时内轮廓与外轮廓: http://blog.csdn.net/chaipp0607/article/details/53765440
chaibubble
2022/05/07
6240
OpenCV findContours函数边缘近似方法
【OpenCV入门之九】轮廓查找和多边形包围轮廓
学习计算机视觉最重要的能力应该就是编程了,为了帮助小伙伴尽快入门计算机视觉,小白准备了【OpenCV入门】系列。新的一年文章的内容进行了很大的完善,主要是借鉴了更多大神的文章,希望让小伙伴更加容易理解。如果小伙伴觉得有帮助,请点击一下文末的“好看”鼓励一下小白。
小白学视觉
2019/06/02
2K0
[C++]opencv中findContours函数用法
cv::findContours 是 OpenCV 库中用于在二值图像中查找轮廓的函数。该函数非常强大,可以用于图像分割、形状分析等任务。以下是对 cv::findContours 函数的详细介绍:
云未归来
2025/07/21
950
Opencv分水岭算法——watershed自动图像分割用法[通俗易懂]
分水岭算法是一种图像区域分割法,在分割的过程中,它会把跟临近像素间的相似性作为重要的参考依据,从而将在空间位置上相近并且灰度值相近的像素点互相连接起来构成一个封闭的轮廓,封闭性是分水岭算法的一个重要特征。
全栈程序员站长
2022/09/07
5K0
[C++]使用OpenCV去除面积较小的连通域
云未归来
2025/07/20
1060
[C++]使用OpenCV去除面积较小的连通域
VC++中使用OpenCV进行形状和轮廓检测
在VC++中使用OpenCV进行形状和轮廓检测,轮廓是形状分析以及物体检测和识别的有用工具。如下面的图像中Shapes.png中有三角形、矩形、正方形、圆形等,我们如何去区分不同的形状,并且根据轮廓进行检测呢?
ccf19881030
2024/05/24
9370
VC++中使用OpenCV进行形状和轮廓检测
终于可以摆脱OpenCV中Hough圆调参的烦恼了
OpenCV图像项目中,圆的检测很常见。 例如:检测烂苹果的个数,寻找目标靶心,人眼,嘴巴识别等。 其中用到的关键技术是OpenCV中集成的霍夫圆检测函数。 HoughCircles( InputArray image, // 输入图像 ,必须是8位的单通道灰度图像 OutputArray circles, // 输出结果,发现的圆信息 Int method, // 方法 - HOUGH_GRADIENT Double dp,
用户9831583
2022/06/16
3K0
终于可以摆脱OpenCV中Hough圆调参的烦恼了
OpenCV二维码检测与定位
在如今流行扫描的年代,应用程序实现二维码扫描检测与识别已经是应用程序的标配、特别是在移动端、如果你的应用程序不能自动发现检测二维码,自动定位二维码你都不好意思跟别人打招呼,二维码识别与解析基于ZXin
OpenCV学堂
2018/04/04
4.8K0
OpenCV二维码检测与定位
OpenCV 应用边缘检测与霍夫线变换实现旋转角度检测
使用opencv的图片旋转功能,把它旋转一个角度,旋转方法参考: http://blog.csdn.net/chaipp0607/article/details/63263347
chaibubble
2022/05/07
1.1K0
OpenCV 应用边缘检测与霍夫线变换实现旋转角度检测
OpenCV寻找复杂背景下物体的轮廓
这是一个来自OPenCV问答社区 - "answerOpenCV"问题,整编如下: (http://answers.opencv.org/question/200422/opencv-c-filling-holes/) title:OpenCV / C++ - Filling holes content: Hello there, For a personnel projet, I'm trying to detect object and there shadow. These are the result I have for now: Original:
OpenCV学堂
2018/10/23
2.2K0
OpenCV寻找复杂背景下物体的轮廓
OpenCV 检测二维码并定位
程序步骤: 1.图片缩小 2.灰度化,直方图均衡化,对比度增强,滤波 3.otsu阈值分割 4.五次膨胀 5.轮廓查找,如果轮廓满足一下条件,认为可能为二维码区域,像素面积大于60,长短轴之比小于1.3 6.对疑似区域做判断,因为本实验二维码贴在大概中心位置,找到疑似轮廓的质心,判断质心是不是在图片长宽的三分之一到三分之二之间,如果是认为是二维码区域 7.对二维码区域画成蓝色
chaibubble
2022/05/07
5520
OpenCV 检测二维码并定位
OpenCV轮廓检测,计算物体旋转角度
http://blog.csdn.net/wangyaninglm/article/details/41864251
流川疯
2019/01/18
4.5K0
OpenCV 删除轮廓的方法(一)
一种比较方便的删除轮廓的处理方式,是我刚刚学习到的一个方法,在这之前,如果我想删除一个不需要的轮廓,用的方法是将该轮廓填充为背景色,之前的博客提到过,在countours容器中,如果把轮廓填充为背景色,那么只是视觉上看不到该轮廓,但是实际上还存在在容器中。所以之前总是要填充之后从新copyto一下,然后重新找一遍轮廓,达到删除轮廓的效果。这种方式实在是low。 [见之前的博客http://blog.csdn.net/chaipp0607/article/details/52858661 代码如下:
chaibubble
2022/05/07
5230
OpenCV 删除轮廓的方法(一)
OPENCV轮廓提取findContours和drawContours
void findContours//提取轮廓,用于提取图像的轮廓 ( InputOutputArray image,//输入图像,必须是8位单通道图像,并且应该转化成二值的 OutputArrayOfArrays contours,//检测到的轮廓,每个轮廓被表示成一个point向量 OutputArray hierarchy,//可选的输出向量,包含图像的拓扑信息。其中元素的个数和检测到的轮廓的数量相等 int mode,//说明需要的轮廓类型和希望的返回值方式 int method,//轮廓近似方法 Point offset = Point() )
全栈程序员站长
2022/11/17
1.3K0
OPENCV轮廓提取findContours和drawContours
OpenCV 矩形轮廓检测
转载请注明出处:http://blog.csdn.net/wangyaninglm/article/details/44151213,
流川疯
2022/11/29
1.1K0
OpenCV 矩形轮廓检测
opencv 凹凸性检测 和 缺陷分析
原文链接:https://blog.csdn.net/lichengyu/article/details/38392473
用户1148525
2019/10/30
3.3K0
opencv 凹凸性检测 和  缺陷分析
OpenCV轮廓按面积大小排序(附Python/C++代码)
今天分享一个使用OpenCV给轮廓排序的例子,排序是依据轮廓面积的大小,当然你还可以改成其他的,比如宽高,长度等。
Color Space
2020/05/22
7.5K1
OpenCV 删除轮廓的方法(二)
利用vector迭代器(iterator)遍历内容,利用erase()函数删除轮廓,实验设计为小于20的轮廓被删除,为了效果更明显,在阈值分割前不做平滑和滤波的处理,代码如下:
chaibubble
2022/05/07
1K0
OpenCV 删除轮廓的方法(二)
相关推荐
OpenCV 轮廓检测
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验