编译opencv_cuda

这篇博客介绍了如何在 CentOS 系统中使用 devtoolset 升级到 GCC 8 并设置为默认环境。接着,详细步骤演示了如何升级 cmake 到 3.21 版本,以及安装必要的库。然后,博主提供了从源码编译 OpenCV 4.5.3 带 GPU 支持的步骤,包括解决因网络问题而预下载的依赖。最后,针对编译后的库文件无法找到的问题,给出了添加到 LD_LIBRARY_PATH 和更新 ld.so.conf 的解决方案。

做个小笔记使用
devtoolset 升级gcc
root权限下

opencv源码目录有.cache目录 需要下载链接别的库 由于墙的原因,我已经下载保存了。链接 https://kuige.lanzouw.com/iAWuksfzdlc
密码:kuige

升级到gcc8环境(devtoolset)方式

[root@localhost ~]# yum install centos-release-scl
[root@localhost ~]# yum install devtoolset-8
[root@localhost ~]# scl enable devtoolset-8 bash
# 如果需要设置为永久环境  centos下可以这样做
[root@localhost home]# echo "source /opt/rh/devtoolset-8/enable" >> /etc/bashrc

升级cmake到3.21

[root@localhost home]# mkdir cmake
[root@localhost home]# cd cmake/
[root@localhost cmake]# ls
[root@localhost cmake]# wget https://cmake.org/files/v3.21/cmake-3.21.0.tar.gz
[root@localhost cmake]# tar -zvxf cmake-3.21.0.tar.gz
# 安装必要库 OpenSSL
[root@localhost cmake]# yum -y install ncurses-devel
[root@localhost cmake]# yum install openssl-devel 
[root@localhost cmake]# cd cmake-3.21.0
[root@localhost cmake]# yum install ncurses-devel
[root@localhost cmake-3.21.0]# ./configure --prefix=/usr/local/cmake
[root@localhost cmake-3.21.0]# gmake -j16 && gmake install
# 电脑本身有cmake
[root@localhost cmake-3.21.0]# ln -sf /usr/local/cmake/bin/cmake /usr/bin/cmake

编译opencv(带GPU版本)

[root@localhost opencv]# yum install dnf
[root@localhost opencv]# sudo dnf install epel-release git gcc gcc-c++ cmake3 qt5-qtbase-devel python3 python3-devel python3-pip cmake python3-devel python3-numpy gtk2-devel libpng-devel jasper-devel openexr-devel libwebp-devel libjpeg-turbo-devel libtiff-devel tbb-devel libv4l-devel eigen3-devel freeglut-devel mesa-libGL mesa-libGL-devel boost boost-thread boost-devel gstreamer1-plugins-base
# 官网下载了opencv4.5.3 
[root@localhost opencv]# unzip opencv-4.5.3.zip
# 再下载opencv-contrib 源码
[root@localhost opencv]# git clone --recursive https://gitee.com/kui9702/opencv_contrib.git
# 编译  里面在opencv源码目录有.cache目录 需要下载子项目  由于墙的原因,我已经下载保存链接  https://url25.ctfile.com/f/34628125-649528014-3062c3?p=3005 (访问密码: 3005)
[root@localhost opencv-4.5.3]# mkdir build
[root@localhost opencv-4.5.3]# cd build
# [root@localhost build]# cmake -D CMAKE_INSTALL_PREFIX=/usr/local -D INSTALL_PYTHON_EXAMPLES=ON -D INSTALL_C_EXAMPLES=OFF -D OPENCV_ENABLE_NONFREE=ON -D WITH_CUDA=ON -D WITH_CUDNN=ON -D OPENCV_DNN_CUDA=ON -D ENABLE_FAST_MATH=1 -D CUDA_FAST_MATH=1 -D CUDA_ARCH_BIN=7.5 -D WITH_CUBLAS=1 -D OPENCV_EXTRA_MODULES_PATH=/home/opencv/opencv_contrib/modules -D BUILD_EXAMPLES=off -D OPENCV_GENERATE_PKGCONFIG=ON ..
# 可以通过ccmake去配置 
[root@localhost build]#  ccmake3 ../
# 如果ccmake3 找不到
# 可以在cmake/*(省略了中间的文件夹)/bin 目录下可找到ccmake
[root@localhost build]# */ccmake ../
# 先配置了WITH_CUDA ON 然后按C(configure)之后按e重新配置,再配置相关
[root@localhost build]# make -j8
[root@localhost build]# make install
[root@localhost build]# sudo ln -s /usr/local/lib64/pkgconfig/opencv4.pc /usr/share/pkgconfig/

在这里插入图片描述

在这里插入图片描述
![在这里插入图片描述](https://img-blog.csdnimg.cn/4dd076c030d640b3880e498663eed148.png?x-ossprocess=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2t1aTk3MDI=,size_16,color_FFFFFF,t_70
在这里插入图片描述
这边是做java调用so库
如果出现"cannot open shared object file: No such file or directory",但是可以在系统目录下找到,则先ldd *.so,看看是不是都链接了。
如果都未链接到,如下
在这里插入图片描述
则做

[root@localhost libCppSurf]# export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:(你的目录,比如)/usr/local/lib64
[root@localhost libCppSurf]# ldd libSurfMatch_CUDA.so
# 则可以看到都链接到库了

在这里插入图片描述

之后仍然报上述"No such file or directory"的错误,则需要修改

[root@localhost libCppSurf]# vim /etc/ld.so.conf

添加如下
include /etc/ld.so.conf.d/*.conf
/usr/local/lib64(你的目录,比如)

[root@localhost libCppSurf]# sudo ldconfig

看看是否能成功

补充:
如果编译过程出现EIGEN问题 建议直接屏蔽该文件或者文件夹 主要是centos下升级gcc太折磨人 如果不是必要的,还是直接删除或者屏蔽

### 关于 OpenCVCUDA 12.4 的兼容性和安装配置 #### 兼容性分析 OpenCVCUDA 的支持依赖于其版本号。较新的 OpenCV 版本通常会提供对最新 CUDA 版本的支持,但并非所有版本都完全适配最新的 CUDA 发布版。对于 CUDA 12.4,需确认所使用的 OpenCV 是否已更新至能够支持该版本的 CUDA[^1]。 目前官方文档并未明确指出 OpenCV 哪一具体版本正式支持 CUDA 12.4。然而,基于历史记录和社区反馈,建议使用 OpenCV 4.7 或更高版本以获得最佳兼容性。这些版本更有可能包含针对新硬件架构优化的功能以及修复潜在问题的能力。 #### 配置环境变量 为了使系统识别到 NVIDIA 提供的 CUDA 工具包,在设置开发环境时需要正确配置路径信息。虽然引用中的例子展示了如何为 CUDA v11.1 添加必要的目录[^2],但对于 CUDA 12.4,则应调整如下: - **库文件夹**: `C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v12.4\lib\x64` - **头文件夹**: `C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v12.4\include` - **性能工具接口 (CUPTI)**: `C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v12.4\extras\CUPTI\lib64` 此外还需注意二进制样本位置可能有所变化,请参照实际安装情况修改相应部分。 #### 编译与构建过程 当准备就绪后可以通过 CMake 来完成项目生成工作。以下是几个重要选项及其推荐值: ```cmake set(CMAKE_BUILD_TYPE Release) option(BUILD_opencv_world "Build single library with all modules" ON) find_package(CUDA REQUIRED) if(CUDA_FOUND) set(HAVE_CUDA TRUE CACHE INTERNAL "") endif() ``` 接着执行编译命令前记得清理旧有缓存数据以免干扰最终产物质量。 #### 示例代码片段展示加速效果 下面给出一段简单的 Python 脚本来演示利用 DNN 模块加载预训练模型并处理图像的过程。 ```python import cv2 as cv net = cv.dnn.readNetFromONNX('model.onnx') img = cv.imread('input.jpg') blob = cv.dnn.blobFromImage(img, scalefactor=1/255.0, size=(640, 640), swapRB=True) net.setPreferableBackend(cv.dnn.DNN_BACKEND_CUDA) net.setPreferableTarget(cv.dnn.DNN_TARGET_CUDA_FP16) output = net.forward() cv.imwrite('output.png', output.reshape(output.shape[1], output.shape[2])) ``` 此脚本假设存在名为`model.onnx`的神经网络权重文件,并且输入图片命名为`input.jpg`。通过调用`DNN_BACKEND_CUDA`及`DNN_TARGET_CUDA_FP16`方法实现GPU上的高效运算。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

kui9702

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值