OpenCV光流Optical Flow怎么实现


这篇文章主要介绍了OpenCV光流OpticalFlow怎么实现的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇OpenCV光流OpticalFlow怎么实现文章都会有所收获,下面我们一起来看看吧。光流是由物体或相机的运动引起的图像物体在两个连续帧之间的明显运动的模式。它是二维向量场,其中每个向量都是一个位移向量,显示点从第一帧到第二帧的移动。如下图所示。它显示了一个球在连续 5 帧中移动。箭头表示其位移矢量。光流在以下领域有许多应用:运动结构视频压缩视频稳定…光流基于以下几个假设:对象的像素强度在连续帧之间不会改变相邻像素具有相似的运动(用 Harris 角点检测器检查逆矩阵的相似性。它表示角点是更好的跟踪点。)所以从用户的角度来看,这个想法很简单,给出了一些要追踪的要点,收到了这些点的光学流量矢量。但是,还有一些问题。到目前为止,正在处理的是小的动作,因此当有很大的动作时它失败了。要处理这一点,需要使用金字塔。当在金字塔上采样时,会消除小型动作,大的运动会变小。因此,通过在那里应用Lucas-Kanade,将光流与缩放合在一起了。OpenCV的cv2.calcOpticalFlowPyrLK() 提供了所有这些功能。下面创建一个简单的应用程序来跟踪视频中的某些点。为了确定点,使用cv2.goodFeaturesToTrack()。取第一帧,检测其中的一些 Shi-Tomasi 角点,然后使用 Lucas-Kanade 光流迭代跟踪这些点。对于函数cv2.calcOpticalFlowPyrLK(),传递前一帧、前面的点和下一帧。它返回之后的点以及一些状态编号,如果找到之后的点,则值为 1,否则为零。在下一步中迭代地将这些点作为前面的点传递,迭代进行。上述代码没有检查下一个关键点的正确程度。因此,即使图像中任何一个特征点消失,光流也有可能找到下一个看起来可能靠近它的点。实际上, 对于稳健的跟踪,角点应该在特定的时间间隔内检测点。OpenCV sample提出了这样一个例子,它每 5 帧找到一次特征点,还运行对光流点的向后检查,只选择好的点 )。Lucas-Kanade 方法计算稀疏特征集的光流(在示例中,使用 Shi-Tomasi 算法检测到的角点)。OpenCV 提供了另一种算法来寻找密集光流。它计算帧中所有点的光流。它基于 Gunner Farneback 的算法,该算法在 Gunner Farneback 于 2003 年在“Two-Frame Motion Estimation Based on Polynomial Expansion”中进行了解释。下面的示例显示了如何使用上述算法找到密集光流。首先得到一个带有光流向量(u,v)(u,v)(u,v)的 2通道向量,找到它们的大小和方向。对结果进行颜色编码以实现更好的可视化。方向对应于图像的色调值(Hue),幅度对应于值屏幕。代码如下:关于“OpenCV光流OpticalFlow怎么实现”这篇文章的内容就介绍免费云主机域名到这里,感谢各位的阅读!相信大家对“OpenCV光流OpticalFlow怎么实现”知识都有一定的了解,大家如果还想学习更多知识,欢迎关注百云主机行业资讯频道。

相关推荐: C语言中的柔性数组怎么使用

这篇文章主要讲解了“C语言中的柔性数组怎么使用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“C语言中的柔性数组怎么使用”吧!柔性数组就是大小可以变化的数组。注意跟C99中的变长数组区分开来,变长数组指的是可以使…

免责声明:本站发布的图片视频文字,以转载和分享为主,文章观点不代表本站立场,本站不承担相关法律责任;如果涉及侵权请联系邮箱:360163164@qq.com举报,并提供相关证据,经查实将立刻删除涉嫌侵权内容。

Like (0)
Donate 微信扫一扫 微信扫一扫
Previous 07/06 22:20
Next 07/06 22:21

相关推荐