0%

Build And Install OpenCV From Source In Linux

本教程所有步骤均来源于OpenCV官网,由于系统环境版本等因素做了微小的改动。

首先安装依赖和编译器等

1
sudo apt update && sudo apt install -y build-essential cmake g++ wget unzip git

下载源码并解压

1
2
3
4
5
6
7
mkdir -p opencv && cd opencv
wget -O opencv.zip https://codeload.github.com/opencv/opencv/zip/4.5.1
wget -O opencv_contrib.zip https://codeload.github.com/opencv/opencv_contrib/zip/4.5.1
unzip opencv.zip
unzip opencv_contrib.zip
mv opencv-4.5.1 opencv
mv opencv_contrib-4.5.1 opencv_contrib

编译

1
2
3
mkdir -p build && cd build
cmake -DOPENCV_EXTRA_MODULES_PATH=../opencv_contrib/modules ../opencv
cmake --build .

自定义编译选项

上面使用的是官方默认的编译配置,OpenCV提供了众多编译选项,其中一些选项默认是开启的,一些是关闭的。具体内容可参考官方指南,由于我本机安装了MiniConda, CUDA和CUDNN等NVIDIA软件包进行GPU推理加速,所以我使用了如下配置。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
cmake -DCMAKE_BUILD_TYPE=Release \
-DCMAKE_INSTALL_PREFIX=$(python3 -c "import sys; print(sys.prefix)") \
-DOPENCV_ENABLE_NONFREE=ON \
-DWITH_CUDA=ON \
-DWITH_CUBLAS=ON \
-DWITH_CUDNN=ON \
-DWITH_NVCUVID=ON \
-DOPENCV_DNN_CUDA=ON \
-DENABLE_FAST_MATH=1 \
-DCUDA_FAST_MATH=1 \
-DBUILD_opencv_python3=ON \
-DHAVE_opencv_python3=ON \
-DPYTHON3_EXECUTABLE=$(which python3) \
-DPYTHON3_INCLUDE_DIR=$(python3 -c "from distutils.sysconfig import get_python_inc; print(get_python_inc())") \
-DPYTHON3_PACKAGES_PATH=$(python3 -c "from distutils.sysconfig import get_python_lib; print(get_python_lib())") \
-DOPENCV_EXTRA_MODULES_PATH=../opencv_contrib-4.5.2/modules ../opencv-4.5.2

其中WITH_CUDA, WITH_CUBLAS, OPENCV_DNN_CUDA等为开启CUDA, PYTHON3_XXX为设置python3环境,编译完成后opencv库将安装至python环境中,其他选项可参考官方文档中Deep learning段落。

输出如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
--   NVIDIA CUDA:                   YES (ver 11.4, CUFFT CUBLAS FAST_MATH)
-- NVIDIA GPU arch: 35 37 50 52 60 61 70 75 80 86
-- NVIDIA PTX archs:
--
-- cuDNN: YES (ver 8.2.1)
--
-- OpenCL: YES (no extra features)
-- Include path: /home/user/opencv/opencv/3rdparty/include/opencl/1.2
-- Link libraries: Dynamic load
--
-- Python 3:
-- Interpreter: /home/user/miniconda3/envs/yansi/bin/python3 (ver 3.8.13)
-- Libraries: /home/user/miniconda3/envs/yansi/lib/libpython3.8.so (ver 3.8.13)
-- numpy: /home/user/miniconda3/envs/yansi/lib/python3.8/site-packages/numpy/core/include (ver 1.23.0)
-- install path: /home/user/miniconda3/envs/yansi/lib/python3.8/site-packages/cv2/python-3.8

其中需要注意CUDA和cuDNN是不是YES,另外如果要在python中使用opencv的话,则需要注意python的配置是否正确

根据自己的CPU核心数量*2进行编译

1
2
make -j8
sudo make install

#重新加载动态链接库

1
sudo ldconfig