跳到主要内容

OpenCV 源码编译以及安装

系统/软件版本

nameversion
SystemUbuntu 20.04.5 LTS
CMake-GUIv3.24.3
OpenCVv4.7.0
OpenCV-Contribv4.7.0
[可选]Opencv_Extrav4.7.0
[可选]CUDAv12.0
[可选]CUDNNv8.8.1

获取 OpenCV 源码

下载完成后解压

tar zxvf opencv-4.7.0.tar.gz ~/workspace/opencv/4.7.0/
tar zxvf opencv_contrib-4.7.0.tar.gz ~/workspace/opencv/4.7.0/
tar zxvf opencv_extra-4.7.0.tar.gz ~/workspace/opencv/4.7.0/

[可选] 开启 CUDA 支持

安装 CUDA 以及 CUDNN 可以参考 先假装有一个链接


安装依赖

sudo apt-get install \
build-essential \
cmake \
git \
libgtk2.0-dev \
pkg-config \
libavcodec-dev \
libavformat-dev \
libswscale-dev \
libtbb2 \
libtbb-dev \
libjpeg-dev \
libpng-dev \
libtiff-dev \
libdc1394-22 \
libglew-dev \
zlib1g-dev \
libavutil-dev \
libpostproc-dev \
libeigen3-dev \
libopenexr-dev \
libwebp-dev \
x264 \
libx264-dev \
ffmpeg \
libgtk-3-dev \
qtbase5-dev \
qtchooser \
qt5-qmake \
qtbase5-dev-tools \
libgstreamer1.0-dev \
libgstreamer-plugins-base1.0-dev
  • libjasper-dev
sudo add-apt-repository "deb http://security.ubuntu.com/ubuntu xenial-security main"
sudo apt update
sudo apt install libjasper-dev

上述依赖大部分都是可选的,为了省事我选择全都安装,尽量编译出一个内容比较丰富的库,如果你的系统内存比较吃紧,仅仅是想使用简单的 OpenCV 功能,可以参照下面的文档进行选取

编译

新建 build/ 目录存放编译生成的文件

cd ~/workspace/opencv/4.7.0/;mkdir build;cd build
  • [可选] 配置并生成 makefile 过程中会下载一些依赖内容,建议开启网络代理
export http_proxy=socks5://127.0.0.1:7890;
export https_proxy=socks5://127.0.0.1:7890;
export all_proxy=socks5://127.0.0.1:7890
  • [可选] 如果你的 Python 环境使用 Anaconda 或者是其他的 python 环境管理应用,记得启用你的虚拟环境,这里会配置 python 包的路径,编译支持 CUDA 的 opencv-python 版本
conda activate {env-name}

配置 cmake 参数,修改 opencv_extraopencv_contrib 的路径

cmake -DCMAKE_BUILD_TYPE=Release \
-DCMAKE_INSTALL_PREFIX=/usr/local \
-DOPENCV_GENERATE_PKGCONFIG=YES \
-DWITH_QT=ON \
-DWITH_OPENGL=ON \
-DWITH_TBB=ON \
-DWITH_GTK=ON \
-DBUILD_opencv_python2=OFF \
-DBUILD_opencv_python3=OFF \
-DINSTALL_TESTS=ON \
-DOPENCV_TEST_DATA_PATH=../opencv_extra-4.7.0/testdata \
-DOPENCV_EXTRA_MODULES_PATH=../opencv_contrib-4.7.0/modules \
../opencv-4.7.0

这里选择不编译 opencv-python 包,CPU 版本的 opencv-python 直接 pip 安装即可

生成完之后开始编译

NUM_CPU=$(nproc)
make -j$(($NUM_CPU - 1))
信息

可以去泡壶茶然后休息一下,看看番,编译速度取决于CPU

推荐看看这里的视频 —— 不是广告

等待编译完成

安装

sudo make install
  • 将编译好的 .so 文件以及头文件安装到 /usr/local 目录下

配置环境变量

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

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

sudo gedit /etc/bash.bashrc

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

sudo ldconfig

  • 使配置生效

测试安装

  • 搜索链接库,目标输出如下
pkg-config --libs opencv4

cd ~/workspace/opencv/4.7.0/opencv-4.7.0/samples/cpp/example_cmake/
cmake .
make
./opencv_example

成功启动摄像头设备并显示 Hello OpenCV 字样,如果没有摄像头将打开一张黑色的背景

[可选] 测试 opencv-python 安装

前提是你配置 CMake 时启用了 -DBUILD_opencv_python,目标输出如下

python -c "import cv2;print(cv2.getBuildInformation())"

参考