OpenCV
是一个跨平台计算机视觉的开源库,实现了很多图像处理和计算机视觉方面的通用算法
官网虽然提供了预编译好的文件,但是想要使用 contrib
拓展模块或者是 CUDA
的 GPU 支持,就需要从源码编译
Windows
- 软件版本
name | version |
---|---|
System | Windows 10 22H2 |
CMake-GUI | v3.24.3 |
OpenCV | v4.7.0 |
OpenCV-Contrib | v4.7.0 |
Opencv_Extra | v4.7.0 |
Visual Studio | 2022 |
(可选)CUDA | v12.0 |
(可选)CUDNN | v8.8.1 |
安装 CUDA/CUDNN
这一步仅针对有 NVIDIA GPU 的设备,不需要则跳转到 获取源码
下载 CUDA 离线安装包
选择解压目录,解压完成后开始安装,默认安装路径为
C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v12.0
v12.0
为你所选的 CUDA 版本
安装完成后 CUDA 目录会被添加到环境变量,如果没有被添加,手动添加到系统 path 变量中
在 cmd
中使用 nvcc -V
查看 CUDA 版本信息,验证安装
下载 CUDNN 文件压缩包
解压后如下
将除 LICENSE
外的文件全都复制到 CUDA 的安装路径下,如果是默认安装位置,则为
C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v12.0
验证 CUDA & CUDNN 安装
打开 cmd
进入 CUDA 安装目录的 extras\demo_suite
目录
cd C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v12.0\extras\demo_suite
输入 bandwidthTest.exe
进行验证
输入 deviceQuery.exe
进行验证
都输出 Result = PASS
则安装完成
获取源码
name | version |
---|---|
OpenCV | v4.7.0 |
OpenCV-Contrib | v4.7.0 |
解压后放在同一目录下,新建 build
文件夹
build
文件夹用来存放编译后的文件,可以任意命名
配置 CMake 项目
打开 CMake-GUI 分别填入 build
文件夹路径以及 opencv-4.7.0
源码路径
然后点击 Configure
选择 Visual Studio
版本
会出现类似如下的红色提示
原因是 CMake
在配置时会需要下载一些依赖,但是由于网络原因,导致依赖无法下载,根据提示,可以看到链接不到的网址为
=======================================================================
Couldn't download files from the Internet.
Please check the Internet access on this host.
=======================================================================
CMake Warning at cmake/OpenCVDownload.cmake:248 (message):
IPPICV: Download failed: 6;"Couldn't resolve host name"
For details please refer to the download log file:
E:/workspace/temp/build/CMakeDownloadLog.txt
Call Stack (most recent call first):
3rdparty/ippicv/ippicv.cmake:37 (ocv_download)
cmake/OpenCVFindIPP.cmake:259 (download_ippicv)
cmake/OpenCVFindLibsPerf.cmake:12 (include)
CMakeLists.txt:750 (include)
根据输出信息,找到 opencv-4.7.0\3rdparty\ippicv\ippicv.cmake
文件位置
修改 https://raw.githubusercontent.com/opencv/opencv_3rdparty/${IPPICV_COMMIT}/ippicv/
中的 raw.githubusercontent.com
将 url 修改为 https://raw.fastgit.org/opencv/opencv_3rdparty/${IPPICV_COMMIT}/ippicv/
再次 Configure
发现 ippicv
下载成功
但是依然出现 FFMPEG: Download failed: 6;"Couldn't resolve host name"
的错误提示,按前面的方式修改 url 后继续 Configure
错误信息全部清除后将出现
设置 CMake 构建选项
添加完设置后都重新 Configure
添加 OpenCV-Contrib
路径
OPENCV_EXTRA_MODULES_PATH
填入opencv_contrib-4.7.0/modules
路径
同样出现一些文件下载失败的警告,按照之前的方式,修改 url 清除全部警告
- [可选] 开启 CUDA 支持
- [可选] 编译 CUDA 支持的 Python 包
如果启用了 anaconda 环境,则需要将对应的 python lib 路径设置为正确的路径
Visual Studio 执行编译
Linux
- 软件版本
name | version |
---|---|
System | Ubuntu 20.04.5 LTS |
CMake-GUI | v3.24.3 |
OpenCV | v4.7.0 |
OpenCV-Contrib | v4.7.0 |
Opencv_Extra | v4.7.0 |
(可选)CUDA | v12.0 |
(可选)CUDNN | v8.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/
安装各种依赖
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 \
libgtk-3-dev \
qtbase5-dev \
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
编译
新建 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 版本
- 仅CPU
- GPU支持
配置 cmake
参数,修改 opencv_extra
和 opencv_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 安装即可
配置 cmake
参数,修改 opencv_extra
和 opencv_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_OPENCL=ON \
-DWITH_FFMPEG=ON \
-DWITH_CUDA=ON \
-DOPENCV_DNN_CUDA=ON \
-DCUDA_ARCH_BIN=5.0,5.2,6.0,6.1,7.0,7.5,8.0,8.6,8.9,9.0 \
-DENABLE_FAST_MATH=ON \
-DCUDA_FAST_MATH=ON \
-DWITH_CUBLAS=ON \
-DWITH_GTK=ON \
-DCUDA_TOOLKIT_ROOT_DIR=/usr/local/cuda \
-DCUDA_ARCH_PTX="" \
-DINSTALL_TESTS=ON \
-DBUILD_WITH_DEBUG_INFO=ON \
-DBUILD_opencv_python3=ON \
-DPYTHON3_NUMPY_INCLUDE_DIRS=$(python3 -c "import numpy; print(numpy.get_include())") \
-DPYTHON3_PACKAGES_PATH=$(python3 -c "from distutils.sysconfig import get_python_lib; print(get_python_lib())") \
-DPYTHON3_LIBRARY=$(python3 -c "from distutils.sysconfig import get_config_var;from os.path import dirname,join ; print(join(dirname(get_config_var('LIBPC')),get_config_var('LDLIBRARY')))") \
-DOPENCV_TEST_DATA_PATH=../opencv_extra-4.7.0/testdata \
-DOPENCV_EXTRA_MODULES_PATH=../opencv_contrib-4.7.0/modules \
../opencv-4.7.0
生成完之后开始编译
NUM_CPU=$(nproc)
make -j$(($NUM_CPU - 1))
等待编译完成后
sudo make install
测试安装
pkg-config --libs opencv4
测试 opencv-python 安装
python -c "import cv2;print(cv2.getBuildInformation())"