OpenCV 光流演算法加速---使用GPU來計算光流
阿新 • • 發佈:2019-02-04
一、依賴項
- 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.* 版本,參見另外一篇部落格