【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】
前面我们说过,图像的处理流程一般都是这样的,即灰度化-》降噪-》边缘检测-》二值化-》开闭运算-》轮廓检测。虽然前面的几个步骤都可以通过预处理来进行解决,但是最后的轮廓查找还是要自己来处理的。所以,我们正好借着这个机会学下如何用轮廓进行查找图像。
1、创建项目和创建工程
创建项目和创建流程,这部分大家可以参考之前的文章。
2、创建流程
整个流程主要有三部分。第一部分是读取图片,第二部分是图像预处理,第三部分是轮廓检测。
3、预处理的流程
预处理这部分之前已经沟通过,这里可以再复习一下。目前,预处理的流程主要有灰度化、二值化、形态运算和边缘检测四个部分。这四个部分都可以在预处理流程里面一一处理,
4、轮廓检测
我们前面所作的一切,最终目的都是为了进行轮廓检测而来。一般来说,到了这一部分,图像上会留下很多的小块区域,但是并不是所有的小块区域都是我们感兴趣的部分。所以,这个时候我们就要找到这些轮廓并且通过某些参数把感兴趣的那部分,删选出来。
第一步,一般先要输入数据来源。这里的数据来源肯定就是预处理的图像结果了。
第二步添加过滤方式,算法本身自带很多的过滤方式,比如max_area、area、row等等。我们挑一个最简单的就可以了。比如area,
第三步设置合理的最小面积和合理的最大面积。如果设置过小,那么很多小数据都会被包含进来。我们想要的那个轮廓却被排除在外,就像这样。
但是如果区域部分面积过大,那么等于什么也没有选中,这也不合适,
只有我们挑选了合适的参数之后,才能获得自己最终想要的那个结果。比如说,这里我们选择了10000和30000,就可以在众多候选者当中一下子把我们想要的那个轮廓挖掘出来。
不仅如此,我们还可以看到相关区域的输出信息。这一点可以在输出显示一栏当中看到,
这些信息可能暂时还看不出用途。在后续的直线拟合、直线测量中还是可以发挥不小的作用。如图所示,它告诉了我们,合格的轮廓有几个,面积多少,重心在什么地方等等。
5、轮廓的重要性
在图像处理中,轮廓的重要性怎么说都不为过。有了轮廓,我们就能分割物体,就能通过轮廓的一些列属性拆解出我们需要的那些信息,这些属性包括面积、长度、宽度、长宽之比、圆度等等,根据具体的情况进行筛选。如果是比较小的物体,这些小的物体还可以拟合成直线做测量使用,也是非常方便的。所以大家在后面的实践过程中,可以针对轮廓多多练习、多多实践。