C++ OpenCV基于颜色分割实现源视频上物体追踪

前言

上一篇中我们学习了《C++ OpenCV使用InRange对HSV颜色进行分割》,本身通过视频中可以看到我们通过颜色把按摩器提取了出来,这次我们基于上一章的成果,在上面实现原视频中的物体标识出来,呈现出追踪的效果。

实现效果视频

实现思路

  1. 对源视频用InRange进行颜色分割

  2. 对分割出来的图像进行形态学操作(开操作去燥)

  3. 然后再进行N闪的膨胀(N为整数,需要自己把握)

  4. 对膨胀后的形态进行查找轮廓

  5. 生成轮廓的外接矩形

  6. 在源图上把外接矩形绘制出来

代码实现

我们还是用上次的那个项目opencv--video2,按照配置属性(VS2017配置OpenCV通用属性),然后在原来的基础上增加一个矩形的定义,如下图红框所示:

C++ OpenCV基于颜色分割实现源视频上物体追踪_第1张图片

对源视频用InRange进行颜色分割

C++ OpenCV基于颜色分割实现源视频上物体追踪_第2张图片

对分割出来的图像进行开操作(先腐蚀后膨胀)

C++ OpenCV基于颜色分割实现源视频上物体追踪_第3张图片

再进行4次的膨胀操作,这一步的作用是因为视频中部门蓝色由于反光的问题会认为是白色,所以在颜色提取的时候会变成好几个色块,这样我们通过膨胀的操作把分散的色块融合到一起,具体的膨胀次数可以自己测试一下。我是直接填的4效果还不错。

C++ OpenCV基于颜色分割实现源视频上物体追踪_第4张图片

根据膨胀后的开关获取最小外接矩形

C++ OpenCV基于颜色分割实现源视频上物体追踪_第5张图片

上面我们用到了一个DealRect的函数,我们重点看一下这个函数,首先在文件最上面定义了DealRect的函数

C++ OpenCV基于颜色分割实现源视频上物体追踪_第6张图片

然后我们再写DealRect的实现方法

C++ OpenCV基于颜色分割实现源视频上物体追踪_第7张图片

C++ OpenCV基于颜色分割实现源视频上物体追踪_第8张图片

最后我们在源图上绘制出外接矩形并把图像显示出来

C++ OpenCV基于颜色分割实现源视频上物体追踪_第9张图片

这样整个效果就完成了,生成的结果就是文章开始时的视频显示效果,下面是视频中的截图

C++ OpenCV基于颜色分割实现源视频上物体追踪_第10张图片

-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,css,数据可视化,编程语言,android)