python+OpenCV+cuda计算光流

利用OpenCV计算TVL1光流,具体实现可参考 这里,需要注意的是要用 opencv-contrib-pythonopencv-python 是不包含光流计算模块的;这是纯 CPU 的计算方式,计算速度为大约为 3FPS,很难实现实时,考虑使用GPU加速。

1、OpenCV3.x / OpenCV2.x

OpenCV本身支持C++的GPU光流计算方法,完成编译就能使用,但是python的GPU光流计算在OpenCV4.0之前的版本是不被支持的,即便是加入opencv-contrib,从 这里 也能看到关于这个问题的讨论。考虑到OpenCV支持扩展库,可以自己写一个GPU计算光流的扩展库放在 opencv-contribmodules 中,然后 cmake-make-install,之后可以在python中调用。具体的实现方式,可以参考 这里,也可以看一下官方给出的 扩展库的使用方法 然后自己写。

2、OpenCV4.1.0

OpenCV4.1.0之后,python已经开始支持cuda计算了,只需要在联合 opencv-contrib (可以看做是OpenCV的测试版本,一些并不成熟的库都放在这里)编译的时候 WITH_CUDA=ON 即可。成功编译之后完成配置,就可以像下面这样使用:

import cv2 as cv

img1 = cv.imread(img1_path)
img2 = cv.imread(img2_path)

cuMat1 = cv.cuda_GpuMat()
cuMat2 = cv.cuda_GpuMat()
cuMat1.upload(img1)
cuMat2.upload(img2)

TVL1 = cv.cuda_OpticalFlowDual_TVL1.create()
cuFlow = TVL1.calc(cuMat1, cuMat2, None)

flow = cuFlow.download()		// 将 GpuMat 格式的光流转换为 numpy.ndarray

没有找到官方关于python+cuda的文档,只找到一篇 参考 。至于光流的计算可以参考 C++中的实现,二者虽不完全相同但是大差不差,可以对照来看。

你可能感兴趣的:(OpenCV-Python)