【对比评测】OpenCV利用颜色分割获取数量

前言

【对比评测】OpenCV利用颜色分割获取数量_第1张图片

还记得这个图吗?前阵子有篇文章《【综合练习】C++OpenCV实战---获取数量》里面中我们利用学到了一些OpenCV的基本知识进行了数量的提取。当时算是完成了,可以看看文章中的实现思路

【对比评测】OpenCV利用颜色分割获取数量_第2张图片

里面用到了距离变换,连通区域计算,还是归一化等一些API,比较烦所,其中里面一个最关键的问题是通过图像二值化后进行形态学操作,需要反复不停的测试找到一个合适的点才能把最左侧的两个枣区分开,上一章中我们学习了InRange利用HSV颜色分割,我们看看利用颜色分割和上次获取数量有什么不同。

实现思路

  • 利用HSV颜色进行分割

  • 形态学操作(一般用开操作即可)

  • 寻找轮廓并计算个数

看看上面的实现思路,对比前面我们那一篇,感觉是不是简化了不少,下面我们进行代码演示。

代码演示

我们再新建一个项目名为opencv--inrange,按照配置属性(VS2017配置OpenCV通用属性),然后在源文件写入#include和main方法。

1.加载图像

【对比评测】OpenCV利用颜色分割获取数量_第3张图片

2.高斯模糊,定义颜色并进行颜色分割

【对比评测】OpenCV利用颜色分割获取数量_第4张图片

3.形态学操作,做两次开操作

【对比评测】OpenCV利用颜色分割获取数量_第5张图片

4.寻找轮廓并画出轮廓

【对比评测】OpenCV利用颜色分割获取数量_第6张图片

5.打印出轮廓个数及显示图像

【对比评测】OpenCV利用颜色分割获取数量_第7张图片

接下来我们看看运行后的效果

【对比评测】OpenCV利用颜色分割获取数量_第8张图片

左下角红色框里可以看到我们获取到的12个数量完全正确,左上角的我们的原图,右上角是最后找到轮廓后采用随机颜色画出来的形态,右下角的是在我们处理过程中通过HSV颜色分割和形态学操作后显示出来的临时图,从右下图中可以看出来,利用颜色分割最左边两个枣完全给分隔开了,不像我们前面那篇里面两个都粘在了一起,需要通过距离变换及连通区域计算进行处理。

随着我们学习的越来越多,在图像处理上就需要采用最优的策略进来行处理,单独写这篇文章,一个是可以回顾一下当时的一些做法,做一个巩固的复习,另一个就是想把新学到的东西看看能不能把以前做过的东西采用最优的方式提取出来,结果自己还是比较满意的,达到了最终的目的。


-END-

Vaccae的往期经典


OpenCV

《C++ OpenCV案例实战---卡号获取》

《C++ OpenCV案例实战---卡片截取(旋转取卡)》

《C++ OpenCV案例实战---卡片截取(附代码)》

《C++ OpenCV实战---获取数量》


Android

《Android利用SurfaceView结合科大讯飞修改语音实别UI》

《Android关于语音识别的功能实现分析(一)---结构化思维》

《Android关于语音识别的功能实现分析(二)---语义解析》

《Android根据类生成签名字符串》

《Android碎片化布局fragment的实战应用》


.Net C#

《C#自定义特性(Attribute)讲解与实际应用》

《C#根据类生成签名字符串(附DEMO下载地址)》


数据库及其它

《Oracel存储过程写报表实战》

《Delphi轮播视频和图片程序(用于双屏显示程序)》

《SQL随机增加销售数据的脚本编写(附脚本下载地址)》


长按下方二维码关注微卡智享


你可能感兴趣的:(opencv,计算机视觉,python,编程语言,人工智能)