在Ubuntu上编译支持CUDA的OpenCV 4.x
源码获取
从GitHub克隆OpenCV及其扩展模块的源代码:
git clone --single-branch --branch 4.x git@github.com:opencv/opencv.git opencv-4.x
git clone --single-branch --branch 4.x git@github.com:opencv/opencv_contrib.git opencv_contrib-4.x
系统依赖安装
确保系统已安装必要的开发库和工具:
sudo apt-get update
sudo apt-get install -y \
libprotobuf-dev protobuf-compiler \
libgoogle-glog-dev libgflags-dev \
libgphoto2-dev libeigen3-dev libhdf5-dev doxygen \
libavcodec-dev libavformat-dev libswscale-dev \
libgstreamer-plugins-base1.0-dev libgstreamer1.0-dev \
libgtk-4-dev \
libpng-dev libjpeg-dev libopenexr-dev libtiff-dev libwebp-dev \
libopenblas-dev libopenblas-base \
cuda-toolkit-11-8 libcudnn9-cuda-11 libcudnn9-dev-cuda-11
配置与编译
创建构建目录并使用CMake进行配置,启用CUDA加速功能:
mkdir -p build && cd build
cmake .. \
-DOPENCV_EXTRA_MODULES_PATH=../opencv_contrib-4.x/modules \
-DCMAKE_BUILD_TYPE=Release \
-DCMAKE_INSTALL_PREFIX=/usr/local \
-DINSTALL_TESTS=OFF \
-DBUILD_OPENCV_WORLD=OFF \
-DINSTALL_EXAMPLES=OFF \
-DENABLE_FAST_MATH=ON \
-DWITH_QT=ON \
-DWITH_OPENGL=ON \
-DBUILD_opencv_rgbd=OFF \
-DWITH_V4L2=ON \
-DWITH_V4L=ON \
-DWITH_GSTREAMER=ON \
-DWITH_FFMPEG=ON \
-DWITH_PROTOBUF=ON \
-DWITH_VULKAN=ON \
-DWITH_GTK=ON \
-DWITH_TBB=ON \
-DOPENCV_GENERATE_PKGCONFIG=ON \
-DOPENCV_PC_FILE_NAME=opencv.pc \
-DOPENCV_ENABLE_NONFREE=ON \
-DINSTALL_PYTHON_EXAMPLES=OFF \
-DINSTALL_C_EXAMPLES=OFF \
-DBUILD_EXAMPLES=OFF \
-DBUILD_TESTS=OFF \
-DBUILD_opencv_python3=ON \
-DWITH_CUDA=ON \
-DCUDA_FAST_MATH=ON \
-DWITH_CUBLAS=ON \
-DWITH_CUFFT=ON \
-DOPENCV_DNN_CUDA=ON \
-DBUILD_opencv_cudacodec=OFF \
-DWITH_CUDNN=ON \
-DCUDA_ARCH_BIN=8.6
执行编译并安装:
cmake --build . --target install -- -j$(nproc)
常见问题与解决方案
GCC版本不兼容
若遇到如下错误:
/usr/include/crt/host_config.h:139:2: error: #error – unsupported GNU version! gcc versions later than 11 are not supported!
说明当前GCC版本过高,需降级至GCC 10:
sudo apt install gcc-10 g++-10
sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-10 101
gcc --version
CBLAS/LAPACK头文件缺失
出现警告提示头文件未找到:
CMake Warning at cmake/OpenCVFindLAPACK.cmake:52 (message):
LAPACK(OpenBLAS): CBLAS/LAPACK headers are not found in '/usr/include/x86_64-linux-gnu'
解决方法:安装对应开发包并创建符号链接:
sudo apt install liblapacke-dev
sudo ln -s /usr/include/lapacke.h /usr/include/x86_64-linux-gnu/