目录

ubuntu 18.04系统安装OpenCV 4.2.0

主要介绍ubuntu 18.04安装OpenCV 4.2.0

更新系统

1
2
$ sudo apt update 
$ sudo apt upgrade

安装前置依赖包

  • 通用工具
1
2
  $ sudo apt install build-essential cmake pkg-config unzip yasm git checkinstall

  • 图像I/O库 
1
$ sudo apt install libjpeg-dev libpng-dev libtiff-dev
  • 视频/音频库-FFMPEG,GSTREAMER,x264等等
1
2
3
4
$ sudo apt install libavcodec-dev libavformat-dev libswscale-dev libavresample-dev
$ sudo apt install libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev
$ sudo apt install libxvidcore-dev x264 libx264-dev libfaac-dev libmp3lame-dev libtheora-dev 
$ sudo apt install libfaac-dev libmp3lame-dev libvorbis-dev
  • OpenCore-
1
2
$ sudo apt install libopencore-amrnb-dev libopencore-amrwb-dev

  • 照相编程接口库 
1
2
3
4
$ sudo apt-get install libdc1394-22 libdc1394-22-dev libxine2-dev libv4l-dev v4l-utils
$ cd /usr/include/linux
$ sudo ln -s -f ../libv4l1-videodev.h videodev.h
$ cd ~
  • GTK库-图形用户界面
1
$ sudo apt-get install libgtk-3-dev
  • python3所使用的库 
1
2
3
$ sudo apt-get install python3-dev python3-pip
$ sudo -H pip3 install -U pip numpy
$ sudo apt install python3-testresources
  • 用于CPU的C++并行库
1
$ sudo apt-get install libtbb-dev
  • 用于OpenCV的优化库 
1
sudo apt-get install libatlas-base-dev gfortran
  • 可选安装 
1
2
3
$ sudo apt-get install libprotobuf-dev protobuf-compiler
$ sudo apt-get install libgoogle-glog-dev libgflags-dev
$ sudo apt-get install libgphoto2-dev libeigen3-dev libhdf5-dev doxygen

正式安装Opencv 4.2.0步骤

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
$ cd ~
$ mkdir -p installcv1
$ cd installcv1
$ wget -O opencv.zip https://github.com/opencv/opencv/archive/4.1.1.zip
$ wget -O opencv_contrib.zip https://github.com/opencv/opencv_contrib/archive/4.1.1.zip
$ unzip opencv.zip
$ unzip opencv_contrib.zip

$ echo "Create a virtual environtment for the python binding module"
$ sudo pip install virtualenv virtualenvwrapper
$ sudo rm -rf ~/.cache/pip
$ echo "Edit ~/.bashrc"
$ export WORKON_HOME=$HOME/.virtualenvs
$ export VIRTUALENVWRAPPER_PYTHON=/usr/bin/python3
$ source /usr/local/bin/virtualenvwrapper.sh
$ mkvirtualenv cv -p python3
$ pip install numpy

$ echo "Procced with the installation"
$ cd opencv-4.2.0
$ mkdir build
$ cd build

$ cmake -D CMAKE_BUILD_TYPE=RELEASE 
	-D CMAKE_C_COMPILER=/usr/bin/gcc 
-D CMAKE_INSTALL_PREFIX=/home/{youraccount}/opencv
-D INSTALL_PYTHON_EXAMPLES=ON 
-D INSTALL_C_EXAMPLES=OFF 
-D WITH_TBB=ON 
-D WITH_CUDA=ON 
-D BUILD_opencv_cudacodec=OFF 
-D ENABLE_FAST_MATH=1 
-D CUDA_FAST_MATH=1 
-D WITH_CUBLAS=1 
-D WITH_V4L=ON 
-D WITH_QT=OFF 
-D WITH_OPENGL=ON 
-D WITH_GSTREAMER=ON 
-D OPENCV_GENERATE_PKGCONFIG=ON 
-D OPENCV_PC_FILE_NAME=opencv.pc 
-D OPENCV_ENABLE_NONFREE=ON 
-D OPENCV_PYTHON3_INSTALL_PATH=~/.virtualenvs/cv/lib/python3.6/site-packages 
-D OPENCV_EXTRA_MODULES_PATH=~/installcv/opencv_contrib-4.2.0/modules 
-D PYTHON_EXECUTABLE=~/.virtualenvs/cv/bin/python 
-D BUILD_EXAMPLES=ON -D WITH_CUDNN=ON 
-D OPENCV_DNN_CUDA=ON 
-D CUDA_ARCH_BIN=6.1  
-D WITH_INF_ENGINE=ON
-D ENABLE_CXX11=ON
-D INTEL_CVSDK_DIR=/home/sn0w/intel/openvino_2020.1.023/deployment_tools
-D IE_PLUGINS_PATH=/home/sn0w/intel/openvino_2020.1.023/deployment_tools/inference_engine/lib/intel64/
-D INF_ENGINE_RELEASE=2020010000
-D OPENCV_GENERATE_PKGCONFIG=ON
-D BUILD_EXAMPLES=ON  ..

如果你只是想编译静态库,只需要在Cmake时附加 -D BUILD_SHARED_LIBS=OFF

1
2
$ cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_C_COMPILER=/usr/bin/gcc -D CMAKE_INSTALL_PREFIX=/usr/local -D INSTALL_PYTHON_EXAMPLES=ON -D INSTALL_C_EXAMPLES=OFF -D WITH_TBB=ON -D WITH_CUDA=ON -D BUILD_opencv_cudacodec=OFF -D ENABLE_FAST_MATH=1 -D CUDA_FAST_MATH=1 -D WITH_CUBLAS=1 -D WITH_V4L=ON -D WITH_QT=OFF -D WITH_OPENGL=ON -D WITH_GSTREAMER=ON -D OPENCV_GENERATE_PKGCONFIG=ON -D OPENCV_PC_FILE_NAME=opencv.pc -D OPENCV_ENABLE_NONFREE=ON -D OPENCV_PYTHON3_INSTALL_PATH=~/.virtualenvs/cv/lib/python3.6/site-packages -D OPENCV_EXTRA_MODULES_PATH=~/installcv/opencv_contrib-4.2.0/modules -D PYTHON_EXECUTABLE=~/.virtualenvs/cv/bin/python -D BUILD_EXAMPLES=ON -D BUILD_SHARED_LIBS=OFF ..

如果你不想包括CUDA,只需要设置-D WITH_CUDA=OFF

1
2
$ cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_C_COMPILER=/usr/bin/gcc-6 -D CMAKE_INSTALL_PREFIX=/home/{youraccount}/opencv -D INSTALL_PYTHON_EXAMPLES=ON -D INSTALL_C_EXAMPLES=OFF -D WITH_TBB=ON -D WITH_CUDA=OFF -D BUILD_opencv_cudacodec=OFF -D ENABLE_FAST_MATH=1 -D CUDA_FAST_MATH=1 -D WITH_CUBLAS=1 -D WITH_V4L=ON -D WITH_QT=OFF -D WITH_OPENGL=ON -D WITH_GSTREAMER=ON -D OPENCV_GENERATE_PKGCONFIG=ON -D OPENCV_PC_FILE_NAME=opencv.pc -D OPENCV_ENABLE_NONFREE=ON -D OPENCV_PYTHON3_INSTALL_PATH=~/.virtualenvs/cv/lib/python3.6/site-packages -D OPENCV_EXTRA_MODULES_PATH=~/installcv1/opencv_contrib-4.2.0/modules -D PYTHON_EXECUTABLE=~/.virtualenvs/cv/bin/python -D BUILD_EXAMPLES=ON  ..

如果你想使用CUDNN,你必须在Cmake时包含这些标记(正确的设置CUDA_ARCH_BIN的值)

1
2
3
-D WITH_CUDNN=ON \
-D OPENCV_DNN_CUDA=ON \
-D CUDA_ARCH_BIN=6.1 \

https://developer.nvidia.com/cuda-gpus网站上可以看到自己网卡可兼容的CUDA版本情况.

正式编译前,你必须检查CUDA在Cmake输出时是否启用

1
2
3
--   NVIDIA CUDA:                   YES (ver 10.0, CUFFT CUBLAS NVCUVID FAST_MATH)
--     NVIDIA GPU arch:             30 35 37 50 52 60 61 70 75
--     NVIDIA PTX archs:

正式编译和安装

1
2
3
$ nproc
$ make -j8 #!ubuntu 18.04编译过程中出现错误:sudo ln -s /usr/include/eigen3/Eigen /usr/include/Eigen
$ sudo make install

配置环境变量

1
2
3
$ sudo /bin/bash -c 'echo "/usr/local/lib" >> /etc/ld.so.conf.d/opencv.conf'
$ sudo ldconfig
$ 

如果你想让python的cv包能够在系统环境下使用,必须要下面的复制工作

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
$ sudo cp -r ~/.virtualenvs/cv/lib/python3.6/site-packages/cv2 /usr/local/lib/python3.6/dist-packages
$ export LD_LIBRARY_PATH=/home/{youraccount}/ev_sdk/lib:/home/{youraccount}/opencv/lib:/usr/local/lib:/usr/local/cuda-10.0/lib64${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}
$ export OpenCV_DIR=/home/{youraccount}/opencv

$ echo "Modify config-3.6.py to point to the target directory" 
$ sudo nano /usr/local/lib/python3.6/dist-packages/cv2/config-3.6.py 

    ``` 
    PYTHON_EXTENSIONS_PATHS = [
    os.path.join('/usr/local/lib/python3.6/dist-packages/cv2', 'python-3.6')
    ] + PYTHON_EXTENSIONS_PATHS
    ``` 

测试安装  

案例程序

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
//test.cpp
#include <iostream>
#include <ctime>
#include <cmath>
#include "bits/time.h"

#include <opencv2/core.hpp>
#include <opencv2/highgui.hpp>
#include <opencv2/imgproc.hpp>
#include <opencv2/imgcodecs.hpp>

#include <opencv2/core/cuda.hpp>
#include <opencv2/cudaarithm.hpp>
#include <opencv2/cudaimgproc.hpp>

#define TestCUDA true

int main() {
    std::clock_t begin = std::clock();

        try {
            cv::String filename = "/home/raul/Pictures/Screenshot_20170317_105454.png";
            cv::Mat srcHost = cv::imread(filename, cv::IMREAD_GRAYSCALE);

            for(int i=0; i<1000; i++) {
                if(TestCUDA) {
                    cv::cuda::GpuMat dst, src;
                    src.upload(srcHost);

                    //cv::cuda::threshold(src,dst,128.0,255.0, CV_THRESH_BINARY);
                    cv::cuda::bilateralFilter(src,dst,3,1,1);

                    cv::Mat resultHost;
                    dst.download(resultHost);
                } else {
                    cv::Mat dst;
                    cv::bilateralFilter(srcHost,dst,3,1,1);
                }
            }

            //cv::imshow("Result",resultHost);
            //cv::waitKey();

        } catch(const cv::Exception& ex) {
            std::cout << "Error: " << ex.what() << std::endl;
        }

    std::clock_t end = std::clock();
    std::cout << double(end-begin) / CLOCKS_PER_SEC  << std::endl;
}

编译和执行

1
2
$ g++ -o test test.cpp `pkg-config opencv --cflags --libs` 
$ ./test

FAQ

编译过程中如果出现如下错误,说明显卡不支持CUDA的最低要求

1
CUDA backend for DNN module requires CC 5.3 or higher.  Please remove unsupported architectures from CUDA_ARCH_BIN option.

安装或者编译错误  

opencv_contrib-4.1.1/modules/cudaimgproc/src/cuda/bilateral_filter.cu:140: error: (-217:Gpu API call) invalid configuration argument in function ‘bilateral_caller’

cmake项目编译出现undefined reference to `cv::freetype::createFreeType2()  

参考
https://medium.com/repro-repo/install-cuda-10-1-and-cudnn-7-5-0-for-pytorch-on-ubuntu-18-04-lts-9b6124c44cc
https://gist.github.com/raulqf/f42c718a658cddc16f9df07ecc627be7