如何从 cv CalcOpticalFlowPyrLK 中提取像素的速度向量

Posted

技术标签:

【中文标题】如何从 cv CalcOpticalFlowPyrLK 中提取像素的速度向量【英文标题】:How to extract velocity vectors of pixels from cvCalcOpticalFlowPyrLK 【发布时间】:2013-07-07 23:56:20 【问题描述】:

谁能帮我从 OpenCV 的cvCalcOpticalFlowPyrLK 获取每个像素的速度信息?

【问题讨论】:

这和your other question?有什么不同 这次我尝试将 goodFeaturesToTrack 与 cvCalcOpticalFlowPyrLK 一起使用,但前一次使用的是 calcOpticalFlowFarneback,我没有得到预期的结果。 【参考方案1】:

查看示例 (https://github.com/Itseez/opencv/blob/master/samples/cpp/lkdemo.cpp),该示例也可用于 openCV 代码。

一个超级快速的总结:

calcOpticalFlowPyrLK 是稀疏的,所以它需要点来计算光流。 使用goodFeaturesToTrack 初始化点(将图像和空点向量作为输入(加上文档中提供的一些参数))

然后使用cornerSubPix 细化点位置(获取图像和完整的点向量(加上其他参数))

最后加载一个新图像并在你在前一个上初始化的点上运行calcOpticalFlowPyrLK(获取两个图像(这个和上一个)和一个完整和空的点向量(对应于上一个图像中的点和这个).(您可能不需要为下一张图像初始化点,而是使用 calcOpticalFlowPyrLK 提供的点)

点位置的差异除以图像之间的时间得出速度。

但请查看示例了解详情

【讨论】:

感谢 Kamjagi 的帮助。另一个问题,我们能否获得帧中所有像素的光流,还是仅获得 goodFeaturesToTrack 认为好的特征? 亲爱的 Kamjagi,只是为了弄清楚我想要做什么来显示视频中一帧的所有像素的光流/速度。 那么您描述的是密集问题而不是稀疏问题,因此 calcOpticalFlowPyrLK 不是要走的路。看一下 createOptFlow_DualTVL1 和密集 OF github.com/Itseez/opencv/blob/master/samples/cpp/… 的这个示例 Kamjagin,非常感谢,这正是我想要的。我仍然需要根据我的范围进行定制,如果我有任何问题,我会回来的。谢谢大家的帮助。尊重!!! 谢谢。只是试着在未来写出更好的问题(解释问题以及你到目前为止所做的尝试)。

以上是关于如何从 cv CalcOpticalFlowPyrLK 中提取像素的速度向量的主要内容,如果未能解决你的问题,请参考以下文章

如何从 cv2.BackgroundSubtractorMOG2 获取背景?

如何从 c++ 接口 cv::Mat 转换为 c IplImage?

如何从 cv::Mat 转换为 CvArr?

如何在opencv中将图像从CV_8UC1转换为CV_32FC1类型?

如何使用模板函数从缓冲区(T* 数据数组)创建 cv::Mat?

如何将单个图像从图像矢量复制到临时 cv::Mat?