Pra*_*esh 5 python opencv opticalflow
我需要计算从头顶摄像机记录的两个连续帧之间车辆的密集光流。我在 Python 中使用物体检测器进行车辆检测和 Farneback 算法进行光流估计。目前,计算整个图像的光流。但是,我需要在检测到的车辆周围创建一个掩码,并仅在选定区域周围计算密集的光流。这将有助于显着加快光流估计。我也可以使用任何其他形式的密集光流估计,但不能使用稀疏光流(例如,Lucas-Kanade 方法)。一种选择是提取车辆区域并单独输入每个车辆区域以进行光流估计,但我正在寻找更好的解决方案。
flow = cv2.calcOpticalFlowFarneback(prvs,next, None, 0.5, 3, 15, 3, 5, 1.2, 0)
Run Code Online (Sandbox Code Playgroud)
对于没有任何光流计算的非车辆掩蔽区域,预期的光流结果将为零。
不幸的是,按照您的计划通过屏蔽或仅提供检测器的边界框来加速运动估计并不是一个好主意。如果您使用密集光流方法,您需要提供整个图像并计算整个图像的流场。如果通过删除来覆盖图像,则会引入人造边缘,这会混淆该方法。另一方面,单独输入每个车辆区域,您将失去密集流方法计算更大(快速)运动的能力。Farneback 等方法使用图像金字塔来处理大运动,即它们基于缩小输入图像。如果区域太小,就会限制计算大运动的能力。减少运行时间的一种可能性是应用稀疏方法,例如(Lucas Kanade 或 RLOF),并将 SparseToDense 插值(例如OpenCV 中的EdgeAwareInterpolation)应用于车辆区域,并获取该区域的密集运动场。
| 归档时间: |
|
| 查看次数: |
1804 次 |
| 最近记录: |