Linux/Debian/Ubuntu-OpenCV(4.5.4/4.6.0)+CUDA(11.3)配置编译全流程
创始人
2025-05-30 00:06:34

文章目录

  • 前言
  • 相关资源下载
    • OpenCV
    • CUDA下载
    • CUDNN下载
  • 编译
  • 错误异常


前言

本文用来记录在linux环境下docker中编译OpenCV with cuda的过程,同时编译了4.5.4和4.6.0两个版本均可编译通过。

本地是linux环境也可参考本文完成编译。

系统:debian 11
CPU:i7
内存:16G
显卡:Nvidia Quadro M2000

相关资源下载

OpenCV

github直接下载连接:
OpenCV 4.5.4 source code
OpenCV 4.6.0 source code

如需下载其他版本可自行通过下述链接下载:
github release page

CUDA下载

对应CUDA版本最低显卡驱动要求1,最新527显卡驱动有点问题,我下载的是470版本linux驱动,顺利安装运行。

显卡驱动安装可参考下述文章:debian11安装Nvidia驱动及Docker运行

CUDA 11.3.1下载2

https://developer.nvidia.com/cuda-11-3-1-download-archive

wget https://developer.download.nvidia.com/compute/cuda/11.3.1/local_installers/cuda_11.3.1_465.19.01_linux.run
sudo sh cuda_11.3.1_465.19.01_linux.run

历史版本下载汇总页面
在这里插入图片描述

CUDNN下载

CUDNN下载需要注册Nvidia账户。
Download cuDNN v8.8.0 (February 7th, 2023), for CUDA 11.x

解压指令:
tar -xvf cudnn-linux-x86_64-8.8.0.121_cuda11-archive.tar.xz

如需其它版本,自行下载对应库:
历史版本下载

解压后复制到CUDA对应目录

sudo apt-get install gcc-9 g++-9sudo ln -s /usr/local/cuda-11.3 cuda
sudo rsync -av /bing_ws/opencv_with_cuda/cudnn/cuda/lib64/* /usr/local/cuda-11.3/lib64/
sudo rsync -av /bing_ws/opencv_with_cuda/cudnn/cuda/include/* /usr/local/cuda-11.3/include/

NVIDIA显卡计算能力一览表
https://developer.nvidia.com/cuda-gpus

在这里插入图片描述

编译

compaile opencv 4.5.4

cmake -S ../opencv -B . \
-DCMAKE_BUILD_TYPE=Release \
-DCMAKE_CONFIGURATION_TYPES=Release \
-DCMAKE_INSTALL_PREFIX=/usr/local/opencv \
-DOPENCV_GENERATE_PKGCONFIG=ON \
-DOPENCV_EXTRA_MODULES_PATH=/bing_ws/opencv_with_cuda/opencv_contrib-4.5.4/modules \
-DBUILD_EXAMPLES=OFF \
-DBUILD_TEST=OFF \
-DBUILD_opencv_world=ON \
-DOPENCV_ENABLE_NONFREE=ON \
-DBUILD_opencv_python2=OFF \
-DBUILD_opencv_python3=ON \
-DWITH_EIGEN=ON \
-DWITH_OPENGL=OFF \
-DCMAKE_LIBRARY_PATH=/usr/local/cuda-11.3/lib64/stubs \
-DWITH_CUDA=ON \
-DCUDA_TOOLKIT_ROOT_DIR=/usr/local/cuda-11.3 \
-DOPENCV_DNN_CUDA=ON \
-DWITH_CUBLAS=ON \
-DWITH_CUDNN=ON \
-DCUDA_FAST_MATH=ON \
-DENABLE_FAST_MATH=ON \
-DCUDA_ARCH_BIN=5.2;6.1;7.5;8.6 \
-DOPENCV_GENERATE_PKGCONFIG=ON \
-DWITH_VTK=ON \
-DWITH_GTK=ON \
-DBUILD_JAVA=OFF# 暂时不用,只需上述配置参数
-DCUDA_GENERATION=Auto \
-DCUDA_nppicom_LIBRARY=stdc++ \
-DWITH_GSTREAMER=ON \
-DVIDEOIO_PLUGIN_LIST=gstreamer \

compaile opencv 4.6.0

cmake -S ../opencv-4.6.0 -B . \
-DCMAKE_BUILD_TYPE=Release \
-DCMAKE_CONFIGURATION_TYPES=Release \
-DCMAKE_INSTALL_PREFIX=/usr/local/opencv \
-DOPENCV_GENERATE_PKGCONFIG=ON \
-DOPENCV_EXTRA_MODULES_PATH=/bing_ws/opencv_with_cuda/opencv_460/opencv_contrib-4.6.0/modules \
-DBUILD_EXAMPLES=OFF \
-DBUILD_TEST=OFF \
-DBUILD_opencv_world=ON \
-DOPENCV_ENABLE_NONFREE=ON \
-DBUILD_opencv_python2=OFF \
-DBUILD_opencv_python3=ON \
-DWITH_EIGEN=ON \
-DWITH_OPENGL=OFF \
-DCMAKE_LIBRARY_PATH=/usr/local/cuda-11.3/lib64/stubs \
-DWITH_CUDA=ON \
-DCUDA_TOOLKIT_ROOT_DIR=/usr/local/cuda-11.3 \
-DOPENCV_DNN_CUDA=ON \
-DWITH_CUBLAS=ON \
-DWITH_CUDNN=ON \
-DCUDA_FAST_MATH=ON \
-DENABLE_FAST_MATH=ON \
-DCUDA_ARCH_BIN=5.2;6.1;7.5;8.6 \
-DOPENCV_GENERATE_PKGCONFIG=ON \
-DWITH_VTK=ON \
-DWITH_GTK=ON \
-DBUILD_JAVA=OFF# 暂时不用,只需上述配置参数
-DCUDA_GENERATION=Auto \
-DCUDA_nppicom_LIBRARY=stdc++ \
-DWITH_GSTREAMER=ON \
-DVIDEOIO_PLUGIN_LIST=gstreamer \

install necessary lib

sudo apt install libgtk2.0-dev libgtk-3-dev
export PATH=${PATH}:/usr/local/cuda/bin
export C_INCLUDE_PATH=${C_INCLUDE_PATH}:/usr/local/cuda/include
export CPLUS_INCLUDE_PATH=${CPLUS_INCLUDE_PATH}:/usr/local/cuda/include
export LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:/usr/local/cuda/lib64
export LIBRARY_PATH=${LIBRARY_PATH}:/usr/local/cuda/lib64vim /etc/ld.so.conf
# add lib
/usr/local/cuda/lib64./predict --image ./images --model ./models/yolov5m-seg.onnx

错误异常

运行程序报错(-217:Gpu API call) cuDNN did not return a suitable algorithm for convolution.
原始错误如下所示:

[ WARN:0@0.317] global /bing_ws/opencv_with_cuda/opencv_460/opencv-4.6.0/modules/dnn/src/op_cuda.cpp (34) initCUDABackend The selected CUDA device does not support FP16 target; switching to FP32 target.
terminate called after throwing an instance of 'cv::Exception'what():  OpenCV(4.6.0) /bing_ws/opencv_with_cuda/opencv_460/opencv-4.6.0/modules/dnn/src/layers/../cuda4dnn/primitives/../csl/cudnn/convolution.hpp:303: error: (-217:Gpu API call) cuDNN did not return a suitable algorithm for convolution. in function 'ConvolutionAlgorithm'

  1. NVIDIA CUDA Toolkit Release Notes ↩︎

  2. CUDA Toolkit 11.3 Update 1 Downloads ↩︎

相关内容

热门资讯

(待补充)小蒟蒻的刷题成长之路... 小蒟蒻的刷题成长之路 蓝桥杯的比赛流程和必考点_蓝桥杯省赛考点_时雨h的博客-CSDN博客 大一学生...
个人小站折腾后记 个人小站折腾后记 🏠个人主页:shark-Gao 🧑个...
福克斯首保多少公里保养一次(福... 本篇文章极速百科给大家谈谈福克斯首保多少公里保养一次,以及福克斯首保多少公里保养一次啊对应的知识点,...
手机号码如何查身份证(手机号码... 今天给各位分享手机号码如何查身份证的知识,其中也会对手机号码如何查身份证号码进行解释,如果能碰巧解决...
婴儿车品牌排行榜前十名,202... 今天给各位分享婴儿车品牌排行榜前十名,2022性价比婴儿车排名的知识,其中也会对婴儿车 排行进行解释...
搜索引擎有哪些(搜索引擎有哪些... 今天给各位分享搜索引擎有哪些的知识,其中也会对搜索引擎有哪些好用进行解释,如果能碰巧解决你现在面临的...
【C语言】结构体(详解) 目录1. 结构体基本知识1.1 结构体声明1.2 结构体的自引用1.3 结构体变量的定义和初始化2....
百万保时捷停斗香上被烧毁,斗香... 今天给各位分享百万保时捷停斗香上被烧毁,斗香烧车还真不稀奇的知识,其中也会对进行解释,如果能碰巧解决...
小提琴价格一般多少钱一把?有什... 本篇文章极速百科给大家谈谈小提琴价格一般多少钱一把?有什么不同吗?,以及小提琴大约多少钱?对应的知识...
驾龄多少年可以上高速?高速几年... 本篇文章极速百科给大家谈谈驾龄多少年可以上高速?高速几年驾龄可以上,以及几年驾龄才能上高速公路对应的...
景逸X3景逸X3最新报价-图片... 本篇文章极速百科给大家谈谈景逸X3景逸X3最新报价-图片-参数,以及景逸x3汽车之家对应的知识点,希...
Pr 复古胶片老电影回忆效果 哈喽,各位小伙伴!今天我们来学习一下如何制作复古胶片老电影回忆效果&#x...
【STM32学习】WWDG窗口... 【STM32学习】WWDG窗口看门狗🐕1、图展示WWDG原理2、复位、中断条件3、溢...
瑞祥是什么意思(瑞祥是什么意思... 今天给各位分享瑞祥是什么意思的知识,其中也会对瑞祥是什么意思?进行解释,如果能碰巧解决你现在面临的问...
黄鼠狼的天敌(黄鼠狼的天敌是什... 今天给各位分享黄鼠狼的天敌的知识,其中也会对黄鼠狼的天敌是什么动物百度百科进行解释,如果能碰巧解决你...
famous怎么读(famou... 今天给各位分享famous怎么读的知识,其中也会对famous怎么读英语进行解释,如果能碰巧解决你现...
中国奉行什么的国防政策(中国奉... 本篇文章极速百科给大家谈谈中国奉行什么的国防政策,以及中国奉行的是什么样的国防政策?对应的知识点,希...
【Hello Linux】进程... 作者:@小萌新 专栏:@Linux 作者简介࿱...
STM32F103指南者开发板... 1 前言 使用STM32F103指南者开发板,安装了Keil5,使用St...
二维数组的表现及应用 1 问题在Java数组中,数组是一种常遇见的表现形式。对于一维数组在最近的学习已经非常...
《程序员面试金典(第6版)》面... 题目描述 给定两个整型数字 N 与 M,以及表示比特位置的 i 与 j(...
什么叫丹霞地貌(中国七大丹霞景... 本篇文章极速百科给大家谈谈什么叫丹霞地貌,以及中国七大丹霞景区对应的知识点,希望对各位有所帮助,不要...
白色骐达mdashmdash好... 今天给各位分享白色骐达mdashmdash好看实用的两箱车的知识,其中也会对白色骐达改装图片进行解释...
裤子尺码28是多大(裤子尺码2... 本篇文章极速百科给大家谈谈裤子尺码28是多大,以及裤子尺码28是多大码对应的知识点,希望对各位有所帮...
进口奔驰s300价格多少(进口... 今天给各位分享进口奔驰s300价格多少的知识,其中也会对进口奔驰s300价格多少钱一辆进行解释,如果...
Keras 的模型(Model... 我们来做个 TensorFlow 的快速入门模型分享。 这次的学习目标就是模型构建的一些相关 API...
串行通信协议(I2C、SPI、... I2C(Inter-Integrated Circuit) 1.简单的双向两线制总线协议标准、半双...
石化团购:放价不打烊,14个汽... 今天给各位分享石化团购:放价不打烊,14个汽车品牌请您挑选!的知识,其中也会对石化团购的商品是真的吗...
tf金箔润唇膏是不是死亡芭比粉... 今天给各位分享tf金箔润唇膏是不是死亡芭比粉的知识,其中也会对tom ford金箔唇膏进行解释,如果...
日本也开始山寨了?造最强悍马,... 本篇文章极速百科给大家谈谈日本也开始山寨了?造最强悍马,比美国的还大一号!,以及日本山寨历史对应的知...