视频截帧+光流 基于 CUDA 9 + OpenCV 3

栏目: 编程工具 · 发布时间: 4年前

内容简介:在计算机视觉领域中,视频算法是重要的一个部分,不同于图像,视频需要含有时序特征的多帧图像,同时,还包括一定的运动信息,如光流。在预处理时,需要将视频中的图像和光流提取出来,开源工程在CUDA 9和OpenCV 3中,配置dense_flow工程。OpenCV的编译步骤如下:
视频截帧+光流 基于 CUDA 9 + OpenCV 3

在计算机视觉领域中,视频算法是重要的一个部分,不同于图像,视频需要含有时序特征的多帧图像,同时,还包括一定的运动信息,如光流。在预处理时,需要将视频中的图像和光流提取出来,开源工程 dense_flow 已经实现这个功能,支持GPU操作。

在CUDA 9和OpenCV 3中,配置dense_flow工程。

编译OpenCV

OpenCV的编译步骤如下:

OpenCV 3

CUDA 9不支持OpenCV2.x,只能选用3.x,如3.1.0, 参考

视频截帧+光流 基于 CUDA 9 + OpenCV 3

OpenCV源码

下载OpenCV源码文件,并解压:

wget https://github.com/opencv/opencv/archive/3.1.0.zip

unzip 3.1.0.zip

cd opencv-3.1.0
复制代码

opencv_contrib

在opencv-3.1.0中,下载opencv_contrib文件,并解压:

wget https://github.com/opencv/opencv_contrib/archive/3.1.0.zip

unzip 3.1.0.zip
复制代码

位置如下:

视频截帧+光流 基于 CUDA 9 + OpenCV 3

原因是,SURF或SIFT算法移入 opencv_contrib ,需要参于源码编译,在 dense_flow 中,调用SURF算法,否则无法找到SURF,参考。

Error:

undefined reference to `cv::xfeatures2d::SURF::create(double, int, int, bool, bool)'
复制代码

修改cmake文件

CMake Error:

CMake Error: The following variables are used in this project, but they are set to NOTFOUND.
Please set them or make sure they are set and tested correctly in the CMake files:
CUDA_nppi_LIBRARY (ADVANCED)
复制代码

原因是,nppi已经废弃,需要替换其他的CUDA,同时,CUDA 2.0已经不兼容当前版本,需要删除。

需要修改 cmake文件夹 下的FindCUDA.cmake和OpenCVDetectCUDA.cmake,还有修改common.hpp。

修改 FindCUDA.cmake 文件,3处替换:

替换

find_cuda_helper_libs(nppi)
复制代码

find_cuda_helper_libs(nppial)
  find_cuda_helper_libs(nppicc)
  find_cuda_helper_libs(nppicom)
  find_cuda_helper_libs(nppidei)
  find_cuda_helper_libs(nppif)
  find_cuda_helper_libs(nppig)
  find_cuda_helper_libs(nppim)
  find_cuda_helper_libs(nppist)
  find_cuda_helper_libs(nppisu)
  find_cuda_helper_libs(nppitc)
复制代码

替换

set(CUDA_npp_LIBRARY "${CUDA_nppc_LIBRARY};${CUDA_nppi_LIBRARY};${CUDA_npps_LIBRARY}")
复制代码

set(CUDA_npp_LIBRARY "${CUDA_nppc_LIBRARY};${CUDA_nppial_LIBRARY};${CUDA_nppicc_LIBRARY};${CUDA_nppicom_LIBRARY};${CUDA_nppidei_LIBRARY};${CUDA_nppif_LIBRARY};${CUDA_nppig_LIBRARY};${CUDA_nppim_LIBRARY};${CUDA_nppist_LIBRARY};${CUDA_nppisu_LIBRARY};${CUDA_nppitc_LIBRARY};${CUDA_npps_LIBRARY}")
复制代码

替换

unset(CUDA_nppi_LIBRARY CACHE)
复制代码

unset(CUDA_nppial_LIBRARY CACHE)
  unset(CUDA_nppicc_LIBRARY CACHE)
  unset(CUDA_nppicom_LIBRARY CACHE)
  unset(CUDA_nppidei_LIBRARY CACHE)
  unset(CUDA_nppif_LIBRARY CACHE)
  unset(CUDA_nppig_LIBRARY CACHE)
  unset(CUDA_nppim_LIBRARY CACHE)
  unset(CUDA_nppist_LIBRARY CACHE)
  unset(CUDA_nppisu_LIBRARY CACHE)
  unset(CUDA_nppitc_LIBRARY CACHE)
复制代码

修改 OpenCVDetectCUDA.cmake 文件,2处删除:

将"Fermi"注释,将"Kepler"提前,即删除"Fermi"的if分支,主要是为了删除CUDA的2.0版本兼容。

set(__cuda_arch_ptx "")
  if(CUDA_GENERATION STREQUAL "Fermi")
    set(__cuda_arch_bin "2.0")
  elseif(CUDA_GENERATION STREQUAL "Kepler")
    set(__cuda_arch_bin "3.0 3.5 3.7")
复制代码

修改为

set(__cuda_arch_ptx "")
  if(CUDA_GENERATION STREQUAL "Kepler")
    set(__cuda_arch_bin "3.0 3.5 3.7")
复制代码

在CUDA版本大于6.5时,删除2.0版本的兼容,修改完成如下:

elseif(${CUDA_VERSION} VERSION_GREATER "6.5")
        set(__cuda_arch_bin "3.0 3.5")
复制代码

opencv-3.1.0/modules/cudev/include/opencv2/cudev/common.hpp 的头文件中,添加:

#include <cuda_fp16.h>
复制代码

参考

hdf5 Error

Error:

hdf5.hpp:40:18: fatal error: hdf5.h: No such file or directory
复制代码

修改opencv-3.1.0/modules/python/common.cmake文件,在文件头部中,添加

find_package(HDF5)
include_directories(${HDF5_INCLUDE_DIRS})
复制代码

参考

make

执行make操作,在 OPENCV_EXTRA_MODULES_PATH 中,需要引入 opencv_contrib

make -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local -D OPENCV_EXTRA_MODULES_PATH=/data1/wcl/workspace/opencv-3.1.0/opencv_contrib-3.1.0/modules/ ..
复制代码

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

算法技术手册(影印版第2版)(英文版)

算法技术手册(影印版第2版)(英文版)

(美)乔治·T·海涅曼//加里·波利斯//斯坦利·塞克欧 / 东南大学 / 2017-10-01 / 96.0

一起来看看 《算法技术手册(影印版第2版)(英文版)》 这本书的介绍吧!

HTML 编码/解码
HTML 编码/解码

HTML 编码/解码

XML、JSON 在线转换
XML、JSON 在线转换

在线XML、JSON转换工具

UNIX 时间戳转换
UNIX 时间戳转换

UNIX 时间戳转换