视觉入门篇——计算机视觉基础(超级全配置源码编译opencv4.8.0+contri+CUDA、CUDNN支持)

PyTorch 2.8

PyTorch 2.8

PyTorch
Cuda

PyTorch 是一个开源的 Python 机器学习库,基于 Torch 库,底层由 C++ 实现,应用于人工智能领域,如计算机视觉和自然语言处理

目录

前言

一、OpenCV是什么?

二、源码编译Opencv

1.系统环境

2.基础依赖安装

3.下载源码

4.安装CUDA视频编解码模块(可选)

5.配置CMake(核心步骤)

6.cmake可能遇到的问题

7.编译与安装

三、验证


前言

竞赛中除了使用深度学习这样的万金油以外,掌握基础图像处理和简单检测也是必不可少的。opencv作为免费且开源的软件,在实际使用中非常广泛,我一般给学弟学妹们要求大家自己下去学习,也就是我不单独教如何使用opencv,默认你是会的。那么像简单的颜色检测、图像增强、巡线检测之类的任务凭借opencv就可以轻松完成,当然常见的图像处理工具还有Pillow等,相信大家会自己下去研究的。opencv的安装难点主要在于cmake配置的多少以及受限下载文件,这里都会给大家讲到。

一、OpenCV是什么?

OpenCV(Open Source Computer Vision Library)是一个开源的计算机视觉和机器学习软件库,由英特尔公司发起并参与开发,现在由 Willow Garage 公司维护。它包含了数百种计算机视觉算法,广泛应用于图像处理、视频分析、物体识别、机器学习等领域。

opencv支持 Windows、Linux、macOS、Android 和 iOS。

借助opencv我们可以实现图像处理、视频分析、特征检测、目标跟踪、机器学习等等并且可以通过编译扩展实现GPU加速处理。可以说,仅仅通过opencv就可以实现竞赛中大部分视觉任务。opencv学习可以锻炼我们解决图像问题的能力,因此对于新手来说,学习opencv花的时间应该要比学习深度学习花的时间要多。

想要了解更多相关知识请看官网https://opencv.org/

二、源码编译Opencv

1.系统环境

  • 操作系统:Ubuntu 20.04 LTS(64位,需更新到最新补丁)

  • GPU:NVIDIA GeForce RTX 3060

  • CUDA:12.4

  • cudnn:9.9

  • 内存:≥16GB(编译过程消耗较大)

  • 磁盘空间:≥20GB(源码+编译产物)

2.基础依赖安装

安装编译所需的工具链和图像/视频/信号 IO 全量依赖(超级全的依赖,大家也可以不安装这么多)

命令安装

sudo apt install -y \
    build-essential \
    pkg-config \
    libgtk-3-dev \
    libgtk2.0-dev \
    libavcodec-dev \
    libavformat-dev \
    libavutil-dev \
    libavresample-dev \
    libswscale-dev \
    libv4l-dev \
    libxvidcore-dev \
    libx264-dev \
    libjpeg-dev \
    libjpeg8-dev \
    libpng-dev \
    libtiff-dev \
    libwebp-dev \
    libopenexr-dev \
    libgdal-dev \
    libxine2-dev \
    libdc1394-22-dev \
    libgstreamer1.0-dev \
    libgstreamer-plugins-base1.0-dev \
    libtbb-dev \
    libtbb2 \
    libatlas-base-dev \
    liblapacke-dev \
    libopenblas-dev \
    libfaac-dev \
    libmp3lame-dev \
    libtheora-dev \
    libvorbis-dev \
    libopencore-amrnb-dev \
    libopencore-amrwb-dev \
    x264 \
    v4l-utils \
    libgphoto2-dev \
    libeigen3-dev \
    libgflags-dev \
    libgoogle-glog-dev \
    libhdf5-dev \
    libutf8proc-dev \
    libssl-dev \
    libtesseract-dev \
    tesseract-ocr \
    doxygen \
    libvtk6-dev \
    libxine2-dev \
    python3-dev \
    python3-numpy \
    gfortran \
    libgstreamer-plugins-bad1.0-dev \
    libgstreamer-plugins-good1.0-dev

3.下载源码

创建编译目录并下载OpenCV 4.8.0及Contrib模块(Contrib包含额外功能如SIFT、CUDA加速):

# 创建编译文件夹
mkdir ~/opencv && cd ~/opencv
# 下载OpenCV 4.8.0源码
wget -O opencv.zip https://github.com/opencv/opencv/archive/refs/tags/4.8.0.zip
# 下载Contrib模块(必须对应4.8.0版本)
wget -O opencv_contrib.zip https://github.com/opencv/opencv_contrib/archive/refs/tags/4.8.0.zip

# 解压并重命名(方便路径引用)
unzip opencv.zip && unzip opencv_contrib.zip
mv opencv-4.8.0 opencv && mv opencv_contrib-4.8.0 opencv_contrib

别忘了使用之前的加速技巧哦~

4.安装CUDA视频编解码模块(可选)

点击官网链接https://developer.nvidia.com/video-codec-sdk

agree后点击download

这里仍然需要我们登录验证

下载解压后

sudo cp -a Interface/*   /usr/local/cuda/include/
sudo cp -a Lib/linux/* /usr/local/cuda/lib64/
sudo ldconfig

再安装头文件

5.配置CMake(核心步骤)

进入OpenCV源码的build目录,执行CMake配置(​​参数需根据自身硬件调整​​):

显卡的计算能力可以在nvidia公司这个页面查看

https://developer.nvidia.cn/cuda-gpus

cd ~/opencv/opencv 
mkdir build #使用cmakee编译c/c++语言时我们习惯新建一个build环境并在其中编译,但是这个名称不强制规定大家可以根据自己喜欢的慢名称来。我们还是尊重传统
cd build


cmake \
    -D CMAKE_BUILD_TYPE=RELEASE \
    -D CMAKE_INSTALL_PREFIX=/usr/local \
    -D WITH_CUDA=ON \
    -D CUDA_TOOLKIT_ROOT_DIR=/usr/local/cuda \
    -D CUDA_ARCH_BIN=8.6 \
    -D CUDA_ARCH_PTX="" \
    -D OPENCV_EXTRA_MODULES_PATH=../../opencv_contrib/modules \
    -D WITH_CUDNN=ON \
    -D BUILD_opencv_cudacodec=OFF \
    -D WITH_CUBLAS=ON \
    -D WITH_CUFFT=ON \
    -D WITH_NVCUVID=ON \
    -D WITH_OPENGL=ON \
    -D WITH_GTK=ON \
    -D WITH_QT=ON \
    -D WITH_VTK=ON \
    -D WITH_TBB=ON \
    -D WITH_EIGEN=ON \
    -D WITH_LAPACK=ON \
    -D WITH_OPENCL=ON \
    -D WITH_OPENEXR=ON \
    -D WITH_WEBP=ON \
    -D WITH_JASPER=ON \
    -D WITH_OPENJPEG=ON \
    -D WITH_GPHOTO2=ON \
    -D WITH_XINE=ON \
    -D WITH_V4L=ON \
    -D WITH_LIBV4L=ON \
    -D WITH_DC1394=ON \
    -D WITH_FFMPEG=ON \
    -D WITH_GSTREAMER=ON \
    -D BUILD_opencv_python3=OFF \
    -D BUILD_opencv_python2=OFF \
    -D BUILD_TESTS=OFF \
    -D BUILD_PERF_TESTS=OFF \
    -D BUILD_EXAMPLES=OFF \
    -D BUILD_DOCS=OFF \
    -D BUILD_opencv_apps=OFF \
    -D BUILD_SHARED_LIBS=ON \
    -D ENABLE_PRECOMPILED_HEADERS=OFF \
    ..

# 关键CMake配置(复制后修改显卡算力)
cmake \
    -D CMAKE_BUILD_TYPE=RELEASE \                      # 编译类型:Release(启用优化,适合最终部署,不包含调试信息)
    -D CMAKE_INSTALL_PREFIX=/usr/local \               # 指定 OpenCV 的安装路径(默认是 /usr/local,可自定义为其他目录)
    -D WITH_CUDA=ON \                                  # 启用 CUDA 支持(允许使用 NVIDIA GPU 加速,需提前安装 CUDA Toolkit)
    -D CUDA_TOOLKIT_ROOT_DIR=/usr/local/cuda \         # 指定 CUDA 工具包的安装路径(通常是 /usr/local/cuda)
    -D CUDA_ARCH_BIN=8.6 \                         # 指定支持的 GPU 计算能力(如 RTX 30 系列为 8.6)
    -D CUDA_ARCH_PTX="" \                              # 不生成 PTX 中间代码(可节省空间,若要兼容更多架构可填如 "8.6")
    -D OPENCV_EXTRA_MODULES_PATH=../../opencv_contrib/modules \  # 指定 opencv_contrib 的 modules 目录,用于编译额外功能模块(如 SIFT 等)
    -D WITH_CUDNN=ON \                                 # 启用 cuDNN 支持(深度学习加速库,需提前安装 cuDNN)
    -D BUILD_opencv_cudacodec=ON \                     # 编译 CUDA 视频编解码模块(如果4没有选就是OFF,支持 GPU 上的视频压缩/解压,如 H.264/H.265)
    -D WITH_CUBLAS=ON \                                # 启用 cuBLAS(CUDA 加速的线性代数库,用于矩阵运算)
    -D WITH_CUFFT=ON \                                 # 启用 cuFFT(CUDA 加速的快速傅里叶变换)
    -D WITH_NVCUVID=ON \                               # 启用 NVIDIA 视频解码加速(NVCUVID,用于硬件解码,如 NVDEC)
    -D WITH_OPENGL=ON \                                # 启用 OpenGL 支持(用于图形渲染,与 Qt/GUI 相关)
    -D WITH_GTK=ON \                                   # 启用 GTK 图形后端(适用于 Linux 桌面环境显示)
    -D WITH_QT=ON \                                    # 启用 Qt 图形后端支持(可选,用于更现代的 UI)
    -D WITH_VTK=ON \                                   # 启用 VTK(Visualization Toolkit)支持,用于高级 3D 可视化
    -D WITH_TBB=ON \                                   # 启用 Intel TBB(Threading Building Blocks,用于高效多线程并行计算)
    -D WITH_EIGEN=ON \                                 # 启用 Eigen 库支持(C++ 数学运算库)
    -D WITH_LAPACK=ON \                                # 启用 LAPACK(线性代数库,常用于矩阵运算)
    -D WITH_OPENCL=ON \                                # 启用 OpenCL 支持(跨平台 GPU/并行计算 API,不限于 NVIDIA)
    -D WITH_OPENEXR=ON \                               # 启用 OpenEXR 高动态范围图像格式支持
    -D WITH_WEBP=ON \                                  # 启用 WebP 图像格式支持
    -D WITH_JASPER=ON \                                # 启用 Jasper 图像格式支持(常用于 JPEG2000)
    -D WITH_OPENJPEG=ON \                              # 启用 OpenJPEG(另一种 JPEG2000 编解码支持)
    -D WITH_GPHOTO2=ON \                               # 启用 gPhoto2(用于连接和控制相机设备)
    -D WITH_XINE=ON \                                  # 启用 xine 多媒体库支持
    -D WITH_V4L=ON \                                   # 启用 Video4Linux(Linux 系统原生摄像头支持)
    -D WITH_LIBV4L=ON \                                # 启用 libv4l(V4L 的用户态封装,更稳定)
    -D WITH_DC1394=ON \                                # 启用 IEEE 1394(FireWire)摄像头支持
    -D WITH_FFMPEG=ON \                                # 启用 FFmpeg 支持(用于视频文件的读写与编解码)
    -D WITH_GSTREAMER=ON \                             # 启用 GStreamer 支持(多媒体流处理框架,常用于视频管道)
    -D BUILD_opencv_python3=OFF \                       # 不编译 Python3 接口(
    -D BUILD_opencv_python2=OFF \                      # 不编译 Python2 接口
    -D BUILD_TESTS=OFF \                               # 不编译测试代码(可加快编译速度,减少体积)
    -D BUILD_PERF_TESTS=OFF \                          # 不编译性能测试代码
    -D BUILD_EXAMPLES=OFF \                            # 不编译示例程序(如想测试功能可设为 ON)
    -D BUILD_DOCS=OFF \                                # 不编译文档(可加快编译,减少不必要内容)
    -D BUILD_opencv_apps=OFF \                         # 不编译 OpenCV 自带的应用程序(如人脸检测等小工具)
    -D BUILD_SHARED_LIBS=ON \                          # 编译为动态链接库(.so 文件,推荐,节省空间,方便部署)
    -D ENABLE_PRECOMPILED_HEADERS=OFF \                # 关闭预编译头(有时可提升编译稳定性或减少问题)
    ..

这里关闭是否关闭python支持,我是觉得opencv-python可以直接通过pip安装,不需要这么搞,并且如果你以后忘了你已经安装了python支持有这个事情,后面pip安装说不定还有风险。

注意:这里的所有命令环境都应该是系统环境,这也是我之前为什么要关闭自动激活conda的原因。

6.cmake可能遇到的问题

由于我们编译了contri模块,这就需要我们联网去额外下载一些扩展,但是由于服务器原因我们可能超时下载失败(这些下载方式叫raw文件下载加速),但是这并不会影响我们的编译结果,但是这样的编译对我们来说是不够完美的,因此我们可以单独下载这一部分内容并放置在它期望的地方

在老版本中,我们可以在cmake构建的最后添加-DOPENCV_DOWNLOAD_MIRROR_ID=gitcode,切换成gitcode源下载

可以参考这位博主的做法https://blog.youkuaiyun.com/m0_65795963/article/details/135637791?fromshare=blogdetail&sharetype=blogdetail&sharerId=135637791&sharerefer=PC&sharesource=In_moon_shadow&sharefrom=from_link

这个方法我试过之后发现不太行,可能是系统不匹配或者版本较新无法使用。如果你发现你也不成功,那么需要删除build文件夹重新建立然后再cmake配置,不然无法消除之前的命令

那么最简单的下载方式就是,直接点击当时它的下载链接用edge浏览器打开

或者在CMakeDownloadLog.txt中找到,用edge浏览器打开

在edge浏览打开后发现确实下载速度非常慢,但是确实可以持续下载。这个时候又到了我们的加速环节了

在链接前添加https://ghfile.geekertao.top/,即可完成加速

速度快到我来不及截图

然后将其移动到opencv/.cache/ippicv/目录下(.cache可能被隐藏)

同事需要将文件名改为这个未下载完的才可以

如果你觉得这个方法比较繁琐和麻烦,这里还有一种方法

进入opencv/3rdparty/ippicv/中找到ippicv.cmake,直接在源头修改网址即可

同样操作的还有opencv/3rdparty/ffmpeg/ffmpeg.cmake

opencv_contrib/modules/xfeatures2d/cmake目录下的download_boostdesc.cmake和download_vgg.cmake

opencv_contrib/modules/face目录下的CMakeLists.txt

opencv_contrib/modules/wechat_qrcode目录下的CMakeLists.txt

最后快到飞起

7.编译与安装

#build目录下别跑,满功率编译开始!嵌入式设备需要6G以上的交换空间,不然会失败,此cmake配置不适用与嵌入式设备
make -j$(nproc)

如果你跟我一样出现了这个问题,那么很遗憾,这个bug是opencv与cuda不兼容,要么降低cuda版本到11.8,那么提升opencv版本到4.10

经过思考我决定升级opencv版本到4.11。经过三分钟的配置我又回到了这一步。

由于体量过于大,编译了十分钟左右。如果大家只想尝试cuda相关加速的话,这里给出一个cmake配置精简版本

cmake -DCMAKE_BUILD_TYPE=RELEASE \
      -DCMAKE_INSTALL_PREFIX=/usr/local \
      -DWITH_CUDA=ON \
      -DCUDA_ARCH_BIN=8.6 \
      -DCUDA_ARCH_PTX="" \
      -DOPENCV_EXTRA_MODULES_PATH=../../opencv_contrib/modules \
      -DWITH_CUDNN=ON \
      -DCUDNN_INCLUDE_DIR=/usr/local/cuda/include \
      -DCUDNN_LIBRARY=/usr/local/cuda/lib64/libcudnn.so \
      -DBUILD_opencv_cudacodec=OFF \
      -DENABLE_FAST_MATH=ON \
      -DCUDA_FAST_MATH=ON \
      -DWITH_CUBLAS=ON \
      -DBUILD_EXAMPLES=OFF \
      -DBUILD_opencv_python3=OFF \
      -DCUDA_TOOLKIT_ROOT_DIR=/usr/local/cuda \
      ..

安装命令

sudo make install

# 配置动态库路径(让系统找到OpenCV库)
echo "/usr/local/lib" | sudo tee /etc/ld.so.conf.d/opencv.conf
sudo ldconfig

三、验证

在opencv/samples/cpp路径下留有一个opencv测试案例

mkdir build

cd build/

cmake ..

此时可以看到已经找到了opencv,让我们继续

make
./opencv_example 

此时会打开我们的摄像头显示窗口并在左上角输出hello opencv

总结

这么简单,你学会如何安装验证了么?

相信你一定在抓紧补救自己的c/c++的相关知识了,如何可能遭老罪了。

您可能感兴趣的与本文相关的镜像

PyTorch 2.8

PyTorch 2.8

PyTorch
Cuda

PyTorch 是一个开源的 Python 机器学习库,基于 Torch 库,底层由 C++ 实现,应用于人工智能领域,如计算机视觉和自然语言处理

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值