Python-OpenCV 处理视频(五): 运动方向判断

502 查看

注意,我使用的OpenCV 版本是 3.0, 低版本就有可能出现第一条评论里的报错

在检测出运动的物体之后,我还需要知道运动的方向,使用了上一节中的办法检测运动我发现很难去计算运动方向,开始考虑通过计算轮廓的中点的变化来实现,但是因为每次检测出得轮廓的数量不稳定,所以这个办法会让误差不可控。

这时我发现了 goodFeaturesToTrack 函数,简直是救了我,goodFeaturesToTrack 函数可以获取图像中的最大特征值的角点,以下是我的思路:

Tips: 看代码之前请先看看我下面写的实现思路,另外还有代码里的注释也对于理解代码会有所帮助

  • 对两帧图像做一个 absdiff 得到新图像。
  • 对新图像做灰度和二值化处理。
  • 使用 goodFeaturesToTrack 函数得到最大特征值的角点。
  • 计算角点的平均点,写入队列。(通过计算平均点的解决办法类似物理中刚体问题抽象成质点解决的思路)
  • 维护一个长度为 10 的队列,队列满时计算队列中数据的增减情况,来确定运动方向。

代码示例(只实现了左右移动的判断):

总的来讲作为一个图像处理的小白,不断地折腾和尝试,终于搞出了自己想要的东西,OpenCV绝对是喜欢折腾的人必要掌握的一个库了,以后肯定还会继续研究这块东西。