1. 程式人生 > >OpenCV 光流演算法加速---使用GPU來計算光流

OpenCV 光流演算法加速---使用GPU來計算光流

一、依賴項

  • OpenCV 2.4.13.x + CUDA 8.0
  • OpenCV 3.2.0及以上 + CUDA 8.0
  • OpenCV 3.4.x + CUDA 9.1

OpenCV編譯時,需要新增CUDA 支援。安裝CUDA 以及OpenCV,可參考我的另外兩篇部落格

二、程式碼

計算稠密光流時,一般使用”calcOpticalFlowFarneback“這個函式來計算,比如

Mat pre = imread(...);
Mat next = imread(...);

Mat preGray, nextGray;
cvtColor(pre, preGray, CV_BGR2GRAY);
cvtColor(next, nextGray, CV_BGR2GRAY);

Mat opf;//光流
calcOpticalFlowFarneback(preGray, nextGray, opf, 0.5, 3, 15, 3, 5, 1.1, 0);

那麼使用GPU來加速時,程式碼如下

OpenCV 3.2.0及以上版本

Mat pre = imread(...);
Mat next = imread(...);

Mat preGray, nextGray;
cvtColor(pre, preGray, CV_BGR2GRAY);
cvtColor(next, nextGray, CV_BGR2GRAY);

cuda::GpuMat g_pg(preGray);     //當前幀的灰度GpuMat
cuda::GpuMat g_ng(nextGray);    //下一幀的灰度GpuMat
cuda::GpuMat opfGpu;            //光流GpuMat
auto opf_tool = cv::cuda::FarnebackOpticalFlow::create(3,0.5,false,15,3,5,1.1,0);
Mat opf; // 光流
opf_tool->calc(g_pg,g_ng,opfGpu);
opfGpu.download(opf);

OpenCV 2.4.13.* 版本,參見另外一篇部落格