安装 OpenCV

编译安装 OpenCV on Linux

以 Ubuntu 和 OpenCV 4.0.0 为例

Ubuntu 编译安装 OpenCV

  1. 安装依赖

    sudo apt update
    sudo apt upgrade
    sudo apt-get install build-essential cmake unzip pkg-config
    sudo apt-get install libjpeg-dev libpng-dev libtiff-dev
    sudo apt-get install libavcodec-dev libavformat-dev libswscale-dev libv4l-dev
    sudo apt-get install libxvidcore-dev libx264-dev
    sudo apt-get install libgtk-3-dev libatlas-base-dev gfortran
    
  2. 下载源码

    cd ~
    wget https://github.com/opencv/opencv/archive/4.0.0.zip
    wget https://github.com/opencv/opencv_contrib/archive/4.0.0.zip
    
  3. 解压移动

    同时也编译 opencv_contrib ,这之中有许多有用的模块,虽然我很多用不到

    unzip opencv.zip
    unzip opencv_contrib.zip
    mv opencv-4.0.0 opencv
    mv opencv_contrib-4.0.0 opencv_contrib
    
  4. 编译安装

    漫长的编译之旅,~make~ 将产生数 G 的文件

    cd opencv
    mkdir build
    cd build
    cmake -D CMAKE_BUILD_TYPE=RELEASE \
        -D CMAKE_INSTALL_PREFIX=/usr/local \
        -D BUILD_EXAMPLES=ON \
        -D INSTALL_C_EXAMPLES=OFF \
        -D OPENCV_EXTRA_MODULES_PATH=~/opencv_contrib/modules ..
    make -j4
    sudo make install
    

    执行 make 时可能会出错,因为 cmake 的时可以因为网络问题一些东西没有下载到本地,导致 make 出错,提示是缺少名如 boostdesc_xxx.i, vgg_generated_xxx.i 的文件,可以从 CMakeError.log 中获取相应下载地址手动下载,有了 boostdesc_xxx,vgg_generated_xxx,xfeatures2d 等相关的文件后,编译就不会出错了,但是 cmake 时因网络问题,应该还会有几个文件没有下载,如 ippicv 这个可以提高 OpenCV 的性能,还有 face_landmark_model.dat 用于面部识别的模型,可以选择使用 export ALL_PROXY=portocol://ip:port 指令让终端使用代理。

  5. 测试

    opencv_version
    

    这条命令会让终端输出版本号,也可以编译一个简单的程序验证:

  6. Source Code

     // filename: cvTest.cpp
     #include <iostream>
     #include <opencv2/opencv.hpp>
    
     int main(int argc, char const *argv[])
     {
       if (argc != 1) { // the program only need one parameter
         std::cout << "error! usage: cvTest.out" << std::endl;
       }
    
       cv::Mat img(200, 200, CV_8UC1); // create a image
       cv::namedWindow("cvTest", cv::WINDOW_AUTOSIZE); // create a window
       cv::imshow("cvTest", img); // show 'img' in the window
    
       cv::waitKey(0); //press any key to close the window
       return 0;
     }
    
  7. Compile it(with [CMakeLists.txt](#CMakeLists-txt))

     cmake .
     make && ./cvTest
    

    出现一张 200×200 的黑色图片就说明 OpenCV 安装成功且 CMake 也配置正确。

    我是使用的 FedoraRemix WSL,执行 ./cvTest 时出现如下错误: error while loading shared libraries: libQt5Core.so.5: cannot open shared object file: No such file or directory 可以使用如下指令解决(参见 GitHub issue):

     sudo strip --remove-section=.note.ABI-tag /usr/lib64/libQt5Core.so.5
    
     #!/bin/sh
    
     if [ -x /usr/lib64/libQt5Core.so.5 ]; then
         (set -x; strip --remove-section=.note.ABI-tag /usr/lib64/libQt5Core.so.5)
     fi
    
     # This "atomic bomb" workaround helps too:
     find /lib /usr/lib /usr/libexec -name '*.so' | xargs strip --remove-section=.note.ABI-tag
    

QT + OpenCV

在 .pro 文件添加以下内容:

INCLUDEPATH += \
    /usr/local/include/opencv4

LIBS += -L/usr/local/lib64 \
    -lopencv_aruco \
    -lopencv_bgsegm \
    -lopencv_bioinspired \
    -lopencv_calib3d \
    -lopencv_ccalib \
    -lopencv_core \
    -lopencv_datasets \
    -lopencv_dnn_objdetect \
    -lopencv_dnn \
    -lopencv_dnn_superres \
    -lopencv_dpm \
    -lopencv_face \
    -lopencv_features2d \
    -lopencv_flann \
    -lopencv_freetype \
    -lopencv_fuzzy \
    -lopencv_gapi \
    -lopencv_hfs \
    -lopencv_highgui \
    -lopencv_imgcodecs \
    -lopencv_img_hash \
    -lopencv_imgproc \
    -lopencv_line_descriptor \
    -lopencv_ml \
    -lopencv_objdetect \
    -lopencv_optflow \
    -lopencv_phase_unwrapping \
    -lopencv_photo \
    -lopencv_plot \
    -lopencv_quality \
    -lopencv_reg \
    -lopencv_rgbd \
    -lopencv_saliency \
    -lopencv_shape \
    -lopencv_stereo \
    -lopencv_stitching \
    -lopencv_structured_light \
    -lopencv_superres \
    -lopencv_surface_matching \
    -lopencv_text \
    -lopencv_tracking \
    -lopencv_videoio \
    -lopencv_video \
    -lopencv_videostab \
    -lopencv_xfeatures2d \
    -lopencv_ximgproc \
    -lopencv_xobjdetect \
    -lopencv_xphoto

CMakeLists.txt

cmake_minimum_required(VERSION 2.8)
project( cvTest )
find_package( OpenCV REQUIRED )
include_directories( ${OpenCV_INCLUDE_DIRS} )
add_executable( cvTest cvTest.cpp )
target_link_libraries( cvTest ${OpenCV_LIBS} )

FedoraRemix WSL 编译 OpenCV

最新版的 FedoraRemix WSL 也就是 Fedora 31 ,直接从官方仓库安装的 OpenCV 无法读取视频,发现是 FFmpeg 没有安装,官方仓库没有 FFmpeg,可以添加其他仓库安装 FFmpeg,我选择是编译安装,顺便把官方仓库安装的 OpenCV 卸载了,改用编译安装的 OpenCV。

  1. 安装依赖

    sudo dnf install python-devel # Python支持
    sudo dnf install ncurses-devel nasm yasm # 为编译FFmpeg
    sudo dnf install gtk+ gtk+-devel gtk2 gtk2-devel gtkglext-devel # OpenCV所依赖的图形化界面
    sudo dnf install libavc1394 libavc1394-devel libdc1394 libdc1394-devel # DC1394视频支持
    sudo dnf install openjpeg-devel libjpeg-devel libpng-devel libtiff-devel
    
  2. 下载源码 参考前文:Ubuntu 编译安装 OpenCV FFmpeg 下载链接: FFmpeg
  3. 编译 FFmpeg

    cd
    unzip FFmpeg-n4.2.2.zip
    cd FFmpeg-n4.2.2
    ./configure --disable-static --enable-shared
    make && sudo make install
    

    主要是 --enabel-shared ,可输入 ./configure --help 查看更多编译选项,如 --enable-libx264 --enable-avresample --disabled-swresample 等。

    但执行 ffmpeg 出现了找不到链接库的错误,解决方法是在 /etc/ld.conf.d/ 下新建一个文件 ffmpeg.conf ,添加内容: /usr/local/lib 到这个新建的文件中

    sudo vi /etc/ld.so.conf.d/ffmpeg.conf
    sudo ldconfig
    ffmpeg
    
  4. 编译 OpenCV 编译前先执行下列指令,不然会导致 FFmpeg 找不到

    export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig:PKG_CONFIG_PATH
    

    然后进入 OpenCV 目录进行编译

    cd opencv # 进入 OpenCV 源码所在目录
    mkdir build
    cd build
    cmake -D CMAKE_BUILD_TYPE=RELEASE \
        -D CMAKE_INSTALL_PREEIX=/usr/local \
        -D BUILD_EXAMPLES=ON \
        -D BUILD_OPENCV_PYTHON2=OFF \
        -D BUILD_OPENCV_PYTHON3=ON \
        -D INSTALL_C_EXAMPLES=OFF \
        -D INSTALL_PYTHON_EXAMPLES=ON \
        -D OPENCV_EXTRA_MODULES_PATH=~/opencv_contrib/modules \
        -D WITH_CUDA=OFF \
        -D WITH_FFMPEG=ON \
        -D WITH_OPENGL=ON ..
    make -j4 # 多线程编译,加快速度
    sudo make install
    

直接安装 OpenCV

从官方仓库安装的版本一般都不是最新版,如果要安装最新版的话最好老老实实的编译安装。

Fedora

Fedora 是 Red Hat 的社区版本,软件版本都比较新,Fedora 31 现在最新的 OpenCV 版本是 3.4.6,可以通过下列命令直接安装。

sudo dnf install opencv opencv-devel opencv-contrib

CentOS 系统的话把 dnf 换成 yum 就行,CentOS 8 可直接使用 dnf 安装。CentOS 7.6 通过此方法安装的是 OpenCV 2.4.5。

macOS

未安装 brew 先安装 brew 包管理器,安装 brew,如果有梯子的话使用

export ALL_PROXY=127.0.0.1:1086

再用 curl ip.sb 或者 curl ip.gs 验证,这时终端进入全局代理模式,这样下载速度就取决于你的梯子速度了。没有梯子的话可以从把源改成国内源的如清华源、中科大源或者阿里源。

安装完 brew 再执行

brew install opencv

brew 会安装很多依赖,全部完成后就安装了 OpenCV,通过 brew 安装的是最新版的 OpenCV,目前是 4.1.2。

Windows

Windows 系统可以从官方下载编译后的压缩包,压缩包一般都有对应的 vc 版本。之后 Visual Studio 若要使用 OpenCV 的话还需要配置工程属性。

附表:

Table 1: relationship between VC and VS
Visual C++ Version Visual Studio Version
VC12 VS2013
VC14 VS2015
VC15 VS2017
湘ICP备19014083号-1