Ubuntu18.04从源码编译OpenCV

配置列表

名称 版本
系统版本 Ubuntu18.04LTS
OpenCV 4.1.0
GCC 7.5.0

从源码编译OpenCV-仅CPU

  • 安装 必须的包
1
2
3
sudo apt-get install build-essential
sudo apt-get install cmake git libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev
sudo apt-get install python-dev python-numpy libtbb2 libtbb-dev libjpeg-dev libpng-dev libtiff-dev libdc1394-22
  • libjasper-dev
1
2
3
sudo add-apt-repository "deb http://security.ubuntu.com/ubuntu xenial-security main"
sudo apt update
sudo apt install libjasper-dev

获取 OpenCV 源码 —— 有两种方式

  • git Clone

    1
    2
    3
    4
    cd ~/<my_working_directory>
    git clone https://github.com/opencv/opencv.git
    git clone https://github.com/opencv/opencv_contrib.git
    git clone https://github.com/opencv/opencv_extra.git
    • 然后分别 cd 到目录中 git checkout <branches>
    • 这里如果选择通过 git 下载,编译的时候则需要注意设置 cmake 参数的路径
  • 从官网下载压缩包[推荐]

  • 这里选择第二种方式,下载完成后将 opencv 解压至自己的工作目录,opencv_contrib 解压至 opencv 的目录中

1
2
3
tar zxvf opencv-4.1.0.tar.gz ~/workspace/
tar zxvf opencv_contrib-4.1.0.tar.gz ~/workspace/
tar zxvf opencv_extra-4.1.0.tar.gz ~/workspace/

编译(CPU)

  • 新建 build/ 目录存放编译生成的文件
1
2
3
cd ~/workspace/opencv-4.1.0/
mkdir build
cd build
  • 配置 cmake 参数,修改 opencv_extraopencv_contrib 的路径
1
2
3
4
5
6
7
cmake -DCMAKE_BUILD_TYPE=Release \
-DINSTALL_TESTS=ON \
-DOPENCV_TEST_DATA_PATH=../../opencv_extra-4.1.0/testdata \
-DOPENCV_EXTRA_MODULES_PATH=../../opencv_contrib-4.1.0/modules \
-DCMAKE_INSTALL_PREFIX=/usr/local \
-DOPENCV_GENERATE_PKGCONFIG=YES \
..
  • 等待 makefile 生成完毕后开始编译 —— 过程保持网络通畅,有一些包需要下载
1
2
NUM_CPU=$(nproc)
make -j$(($NUM_CPU - 1))
  • 等待编译完成后
1
sudo make install
  • 这一步将编译好的 .so 文件以及头文件安装到 /usr/local 目录下

编译完成将OpenCV添加到环境变量

sudo gedit /etc/ld.so.conf.d/opencv.conf

  • 打开 opencv.conf 在其中添加 /usr/local/lib

sudo gedit /etc/bash.bashrc

  • 打开 bash.bashrc 在最后面添加
1
2
PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/lib/pkgconfig 
export PKG_CONFIG_PATH
  • sudo ldconfig

测试

  • 新建一个终端
1
2
3
4
cd ~/workspace/opencv-4.1.0/samples/cpp/example_cmake/
cmake .
make
./opencv_example
  • 成功启动相机并显示 Hello OpenCV 字样
  • 如果你没有摄像头
  • 没有摄像头还玩什么OpenCV,洗洗睡吧🌚

编译完成

从源码编译OpenCV(开启GPU加速)

配置列表

名称 版本
系统版本 Ubuntu18.04LTS
OpenCV 4.1.0
GCC 7.5.0
CUDA 10.2

安装所需依赖

1
2
3
sudo apt-get install build-essential
sudo apt-get install cmake git libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev
sudo apt-get install python-dev python-numpy libtbb2 libtbb-dev libjpeg-dev libpng-dev libtiff-dev libdc1394-22
  • libjasper-dev
1
2
3
sudo add-apt-repository "deb http://security.ubuntu.com/ubuntu xenial-security main"
sudo apt update
sudo apt install libjasper-dev
  • 开启GPU支持还需要安装这些
1
2
3
4
5
6
sudo apt-get install \
libglew-dev \
zlib1g-dev \
libavutil-dev \
libpostproc-dev \
libeigen3-dev

编译(GPU)

  • 新建 build/ 目录存放编译生成的文件
1
2
3
cd ~/workspace/opencv-4.1.0/
mkdir build
cd build
  • 配置 cmake 参数,修改 opencv_extraopencv_contrib 的路径
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
cmake -DCMAKE_BUILD_TYPE=Release \
-DCMAKE_INSTALL_PREFIX=/usr/local \
-DBUILD_PNG=OFF \
-DBUILD_TIFF=OFF \
-DBUILD_TBB=OFF \
-DBUILD_JPEG=OFF \
-DBUILD_JASPER=OFF \
-DBUILD_ZLIB=OFF \
-DBUILD_EXAMPLES=ON \
-DBUILD_opencv_python2=OFF \
-DBUILD_opencv_python3=ON \
-DBUILD_opencv_cudacodec=OFF \
-DWITH_OPENCL=OFF \
-DWITH_OPENMP=OFF \
-DWITH_FFMPEG=ON \
-DWITH_GSTREAMER=OFF \
-DWITH_GSTREAMER_0_10=OFF \
-DWITH_CUDA=ON \
-DWITH_TBB=ON \
-DWITH_GTK=ON \
-DWITH_VTK=OFF \
-DWITH_1394=OFF \
-DWITH_OPENEXR=OFF \
-DCUDA_TOOLKIT_ROOT_DIR=/usr/local/cuda-10.1 \
-DCUDA_ARCH_PTX="" \
-DINSTALL_C_EXAMPLES=OFF \
-DINSTALL_TESTS=ON \
-DOPENCV_TEST_DATA_PATH=../../opencv_extra-4.1.0/testdata \
-DOPENCV_EXTRA_MODULES_PATH=../../opencv_contrib-4.1.0/modules \
-DOPENCV_GENERATE_PKGCONFIG=YES \
..
  • 等待 makefile 生成完毕后开始编译 —— 过程保持网络通畅,有一些包需要下载
1
2
NUM_CPU=$(nproc)
make -j$(($NUM_CPU - 1))
  • 这里编译时间更久,你可以叫几个朋友一起喝茶 (= =!)
  • sudo make install 编译完成后安装

添加环境变量

sudo gedit /etc/ld.so.conf.d/opencv.conf

  • 打开 opencv.conf 在其中添加 /usr/local/lib

sudo gedit /etc/bash.bashrc

  • 打开 bash.bashrc 在最后面添加
1
2
PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/lib/pkgconfig 
export PKG_CONFIG_PATH
  • sudo ldconfig

编译完成

参考