利用OpenCV计算TVL1光流,具体实现可参考 这里,需要注意的是要用 opencv-contrib-python
,opencv-python
是不包含光流计算模块的;这是纯 CPU 的计算方式,计算速度为大约为 3FPS,很难实现实时,考虑使用GPU加速。
1、OpenCV3.x / OpenCV2.x
OpenCV本身支持C++的GPU光流计算方法,完成编译就能使用,但是python的GPU光流计算在OpenCV4.0之前的版本是不被支持的,即便是加入opencv-contrib
,从 这里 也能看到关于这个问题的讨论。考虑到OpenCV支持扩展库,可以自己写一个GPU计算光流的扩展库放在 opencv-contrib
的 modules
中,然后 cmake-make-install
,之后可以在python中调用。具体的实现方式,可以参考 这里,也可以看一下官方给出的 扩展库的使用方法 然后自己写。
2、OpenCV4.1.0
OpenCV4.1.0之后,python已经开始支持cuda计算了,只需要在联合 opencv-contrib
(可以看做是OpenCV的测试版本,一些并不成熟的库都放在这里)编译的时候 WITH_CUDA=ON
即可。成功编译之后完成配置,就可以像下面这样使用:
复制代码
1
2
3
4
5
6
7
8
9
10
11
12import 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++中的实现,二者虽不完全相同但是大差不差,可以对照来看。
最后
以上就是可耐百褶裙最近收集整理的关于python+OpenCV+cuda计算光流的全部内容,更多相关python+OpenCV+cuda计算光流内容请搜索靠谱客的其他文章。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复