(一)Linux下C++ OpenCV开发环境搭建

1.下载源码

opencv官网

2.编译

  • 路径切入源码目录
  • 执行命令:
    cmake -DOPENCV_GENERATE_PKGCONFIG=YES - DCMAKE_INSTALL_PREFIX=/home/lx/opencv/install ..
    make
    make install
    
    注意:
    • 1).-DOPENCV_GENERATE_PKGCONFIG=YES选项是编译生成opencv4.pc这个文件用于pkg-config程序管理已安装库的头文件和库文件,编译结束opencv4.pc文件一般在opencv/install/lib/pkgconfig/opencv4.pc目录;
    • 2).DCMAKE_INSTALL_PREFIX指定make install时的安装目录。

3.使用pkg-config

  • 1.安装
sudo apt install pkg-config
  • 2.设置环境变量PKG_CONFIG_PATH
export
PKG_CONFIG_PATH=/home/lx/sw/opencv/install/lib/pkgconfig:$PKG_CONFIG_PATH
  • 3.查看头文件和库文件目录
# *.so directories 
pkg-config --libs opencv4 
# *.h directories
pkg-config --cflags opencv4 
  • 4.查看OpenCV版本
 pkg-config --modversion opencv4

4.使用CMAKEGCC编译OpenCV程序

  • 1).CMakeList.txt文件
    cmake_minimum_required(VERSION 2.8)
    project( DisplayImage )
    find_package( OpenCV REQUIRED )
    include_directories( ${OpenCV_INCLUDE_DIRS} )
    
    find_packageModuleConfig两种模式,Module模式,cmake需要在cmake安装目录下的share/cmake-/Modules目录和CMAKE_MODULE_PATH目录查找Find.cmake,这个文件负责找到库所在的路径。若Module模式搜索失败,会启用Config模式,通过Config.cmake-config.cmake这两个文件来引入我们需要的库。对于原生支持Cmake编译和安装的库通常会安装Config模式的配置文件到对应目录,这个配置文件直接配置了头文件库文件的路径以及各种cmake变量供find_package使用。对于OpenCVopencv/build目录下,可以看到OpenCVConfig.cmake文件。
  • 2).若find_package找不到安装的opencv
    可通过set(OpenCV_DIR /path)来指定。
    set(OpenCV_DIR /home/lx/rob/opencv-3.4.10/build)
    find_package( OpenCV 3 REQUIRED )
    INCLUDE_DIRECTORIES(${OpenCV_INCLUDE_DIRS})
    

5.使OpenCV支持Nvidia GPU

前提,安装显卡驱动和cudatoolkit及cudnn模块

在Nvidia网站查找显卡算力,设置CUDA_ARCH_BIN的值
(一)Linux下C++ OpenCV开发环境搭建_第1张图片

https://developer.nvidia.com/cuda-gpus
如果CUDA_ARCH_BIN参数设置有误,OpenCV可以编译通过,但使用DNN推理时会报错

File "ssd_object_detection.py", line 74, in 
    detections = net.forward()
cv2.error: OpenCV(4.2.0) /home/a_rosebrock/opencv/modules/dnn/src/cuda/execution.hpp:52: error: (-217:Gpu API call) invalid device function in function 'make_policy'
  • 设置CMake的参数
cmake -D CMAKE_BUILD_TYPE=RELEASE \
	-D CMAKE_INSTALL_PREFIX=/usr/local \
	-D INSTALL_PYTHON_EXAMPLES=ON \
	-D INSTALL_C_EXAMPLES=OFF \
	-D OPENCV_ENABLE_NONFREE=ON \
	-D WITH_CUDA=ON \
	-D WITH_CUDNN=ON \
	-D OPENCV_DNN_CUDA=ON \
	-D ENABLE_FAST_MATH=1 \
	-D CUDA_FAST_MATH=1 \
	-D CUDA_ARCH_BIN=7.0 \
	-D WITH_CUBLAS=1 \
	-D OPENCV_EXTRA_MODULES_PATH=~/opencv_contrib/modules \
	-D HAVE_opencv_python3=ON \
	-D PYTHON_EXECUTABLE=~/.virtualenvs/opencv_cuda/bin/python \
    -D BUILD_TIFF=ON \
	-D BUILD_EXAMPLES=ON ..

常见问题

  • 0. 编译C++时报错
    /usr/lib/x86_64-linux-gnu/libvtkIOImage-6.2.so.6.2: undefined reference to `_TIFFmalloc@LIBTIFF_4.0'
    
    OpenCV需要使用libtiff4ubuntu上已经舍弃,取而代之的是libtiff5-dev,所以解决这个问题的方式有两个:
    • 0)sudo apt-get install libtiff5-dev
    • 1)cmake指令后跟-DBUILD_TIFF=ON以在编译OpenCV时同时编译libtiff4
      ubuntu20.04编译OpenCV 4.4.0时验证可行。
  • 1. error while loading shared libraries
    libopencv_highgui.so.4.4: cannot open shared object file: No such file or directory

    解决方法:
    set LD_LIBRARY_ATH as pkg-config --libs opencv4
    export LD_LIBRARY_ATH="/home/lx/sw/opencv/install/lib:$LD_LIBRARY_ATH" sudo ldconfig
    

参考:
1.https://zhuanlan.zhihu.com/p/97369704
2.https://docs.opencv.org/4.5.4/d7/d9f/tutorial_linux_install.html

你可能感兴趣的:(OpenCV,opencv,人工智能,计算机视觉)