前言
上一篇中我们学习了《C++ OpenCV使用InRange对HSV颜色进行分割》,本身通过视频中可以看到我们通过颜色把按摩器提取了出来,这次我们基于上一章的成果,在上面实现原视频中的物体标识出来,呈现出追踪的效果。
实现效果视频
实现思路
- 对源视频用InRange进行颜色分割
- 对分割出来的图像进行形态学操作(开操作去燥)
- 然后再进行N闪的膨胀(N为整数,需要自己把握)
- 对膨胀后的形态进行查找轮廓
- 生成轮廓的外接矩形
- 在源图上把外接矩形绘制出来
代码实现
我们还是用上次的那个项目opencv--video2,按照配置属性(VS2017配置OpenCV通用属性),然后在原来的基础上增加一个矩形的定义,如下图红框所示:
对源视频用InRange进行颜色分割
对分割出来的图像进行开操作(先腐蚀后膨胀)
再进行4次的膨胀操作,这一步的作用是因为视频中部门蓝色由于反光的问题会认为是白色,所以在颜色提取的时候会变成好几个色块,这样我们通过膨胀的操作把分散的色块融合到一起,具体的膨胀次数可以自己测试一下。我是直接填的4效果还不错。
根据膨胀后的开关获取最小外接矩形
上面我们用到了一个DealRect的函数,我们重点看一下这个函数,首先在文件最上面定义了DealRect的函数
然后我们再写DealRect的实现方法
最后我们在源图上绘制出外接矩形并把图像显示出来
这样整个效果就完成了,生成的结果就是文章开始时的视频显示效果,下面是视频中的截图
-END-