Opencv+Cuda编译的保姆级别教程

Opencv+Cuda编译的保姆级别教程

  • 一、环境总览
  • 二、环境准备
    • 2.1 opencv和opencv扩展
    • 2.2 cuda环境下载
      • 2.2.1 首先电脑要有英伟达的显卡
      • 2.2.2 然后查看显卡驱动版本
      • 2.2.3 下载Cuda Toolkit工具包
      • 2.2.4 下载Cudnn库
    • 2.3 CMake下载
  • 三、CMake配置步骤
    • 3.1 加载路径+第一次Configure
      • 3.1.1 观察有失败的之手动下载文件
        • (1)一找二打三观察
        • (2)一换二加三下载
        • (3)将得到的文件修改名字复制到.cache中
        • (4)其余自动下载失败的文件同理
        • (4)不能下载的文件
    • 3.2 保证上述配置成功后第一次点击Generate
    • 3.3 进行自定义配置
      • 3.3.1 配置扩展库
      • 3.3.2 cuda配置
      • 3.3.3 取消python,java,test模块
      • 3.3.4 勾选不免费的
      • 3.3.5 配置优化编译选项
      • 3.3.6 再次点击Configure,并观察是否出红色提示
      • 3.3.7 无误后点击Generate
    • 3.4 进行cuda配置
  • 三、使用VS2019打开工程
  • 四、配置VS2019
    • 4.1 新建工程文件
    • 4.2 打开属性管理器
    • 4.2 打开属性管理器
    • 4.3 打开属性管理器
      • 4.3.1 添加包含目录
      • 4.3.2 添加库目录
      • 4.3.3 添加输入依赖项
      • 4.3.4 添加环境变量
      • 4.3.5 验证代码
  • 五、遇到的BUG

一、环境总览

名称版本
Windows11
Visual Studio2019P
Cmake3.23.0
Opencv4.4.0
Opencv_contrib4.4.0
Cuda Toolkit11.8
Cudnn8.8.1.3

二、环境准备

2.1 opencv和opencv扩展

链接: opencv
链接: opencv扩展库

下载到自己的文件夹中,并新建一个用于存储结果的文件夹

在这里插入图片描述

2.2 cuda环境下载

2.2.1 首先电脑要有英伟达的显卡

在这里插入图片描述

2.2.2 然后查看显卡驱动版本

查看显卡驱动的版本是因为,我们使用的工具包Cuda Toolkit的版本要小于这个驱动的版本

// 查看驱动版本
nvidia-smi

在这里插入图片描述
链接: 显卡驱动下载链接

2.2.3 下载Cuda Toolkit工具包

链接: Cuda Toolkit工具包下载

// 查看是否下载成功
nvcc -V

在这里插入图片描述

2.2.4 下载Cudnn库

用于GPu加速时用的库

链接: Cudnn库下载

在这里插入图片描述
下载完成后进行复制
在这里插入图片描述
验证结果:
在这个界面打开命令终端,执行这两个文件都出现PASS表示成功
在这里插入图片描述

2.3 CMake下载

链接: CMake下载
在这里插入图片描述

三、CMake配置步骤

3.1 加载路径+第一次Configure

在这里插入图片描述
注意事项:

选择2019 + x64

观察是否有没有下载成功的文件,有python字样的忽略(如下图)
在这里插入图片描述

可能没下载成功的文件

  • Ippicv
  • Ffmpeg
  • 如果有则手动下载,阅读3.1.1
  • 没有就下一步3.2

若出现这个警告则去掉勾选
在这里插入图片描述

3.1.1 观察有失败的之手动下载文件

以下载ffmpeg文件为例,我们需要下载文件,那怎么找到下载的网址呢?

(1)一找二打三观察
  • 找到opencv源文件的这个路径
  • 打开.cmake文件
  • 观察http开头的那行,这就是手动下载的网址

在这里插入图片描述

(2)一换二加三下载
  • 这里的网址需要我们手动补齐
  • https://raw.githubusercontent.com/opencv/opencv_3rdparty/${FFMPEG_BINARIES_COMMIT}/ffmpeg/
  • 将${FFMPEG_BINARIES_COMMIT}变成1df9bf0c0c6c2cf225bd3d8e4cf5985198352454
  • 在后面加入要手动下载的两个文件后缀
  • 变为https://raw.githubusercontent.com/opencv/opencv_3rdparty/1df9bf0c0c6c2cf225bd3d8e4cf5985198352454/ffmpeg/opencv_videoio_ffmpeg_64.dll

在这里插入图片描述

(3)将得到的文件修改名字复制到.cache中

得到了这两个文件
在这里插入图片描述
将他们名字前加上这串加密数字复制到.cache中(每个版本不一样,如果得到对应的加密数字?)
在这里插入图片描述
加密数字在这里得到
在这里插入图片描述

(4)其余自动下载失败的文件同理

总:在这里插入图片描述
分:在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

(4)不能下载的文件

右键页面另存为,改后缀名和需要的一样即可

3.2 保证上述配置成功后第一次点击Generate

在这里插入图片描述

3.3 进行自定义配置

3.3.1 配置扩展库

在这里插入图片描述

3.3.2 cuda配置

在这里插入图片描述

3.3.3 取消python,java,test模块

根据自己需要,我不需要编译python的
在这里插入图片描述

根据自己需要,我不需要编译java的
在这里插入图片描述

根据自己需要,我不需要测试的
在这里插入图片描述

3.3.4 勾选不免费的

使用一些不免费的库就要用,一般很少用,但是我用到了,呜呜呜,写这篇文章的原因就是,我上次编译没勾选这个。(笑脸)

在这里插入图片描述

3.3.5 配置优化编译选项

  • 这个是最后生成了一个opencv_world.lib文件,在使用的时候,直接在附加依赖项添加opencv_world.lib就可以,主要是为了方便。没有打包的话,需要添加其它所有的lib文件,附上没有勾选的最终生成图片
  • 有好处也有坏处,不勾选可以用python写个脚本然后提取名字

在这里插入图片描述
在这里插入图片描述

# 提取文件名字的python代码
import os# 指定文件夹路径
folder_path = "D:\\Build_opencv440\\Build_opencv_cuda440\\install\\x64\\vc16\\lib"# 获取文件名列表
file_names = os.listdir(folder_path)# 打开一个文本文件用于保存文件名
output_file_path = "C:\\Users\\mylenovo\\Desktop\\save.txt"
with open(output_file_path, 'w') as output_file:# 遍历文件名列表并保存去掉后缀的文件名for file_name in file_names:# 使用 os.path.splitext 提取文件名和后缀# base_name = os.path.splitext(file_name)[0]# 写入文件output_file.write(file_name + '\n')print(f"文件名已保存到 {output_file_path}")

3.3.6 再次点击Configure,并观察是否出红色提示

在这里插入图片描述

3.3.7 无误后点击Generate

点击生成!!!

3.4 进行cuda配置

勾选cuda数学模块
在这里插入图片描述
在这里插入图片描述

无误后点击Generate
至此,Cmake工具的任务结束,vs2019登场
在这里插入图片描述

三、使用VS2019打开工程

在这里插入图片描述

选择配置为ReleaseX64,然后右击All_Build 点击生成

在这里插入图片描述
然后就是漫长的等待,我等待了大约120分钟

都成功后再右键install,生成,就大功告成了。
成功的标志是0错误。
在这里插入图片描述

在这里插入图片描述

四、配置VS2019

4.1 新建工程文件

4.2 打开属性管理器

在这里插入图片描述

4.2 打开属性管理器

右键Release,打开属性
在这里插入图片描述

4.3 打开属性管理器

4.3.1 添加包含目录

在这里插入图片描述

4.3.2 添加库目录

在这里插入图片描述

4.3.3 添加输入依赖项

在这里插入图片描述

4.3.4 添加环境变量

在这里插入图片描述

4.3.5 验证代码

// 验证代码
// Copy来自:https://blog.csdn.net/weixin_40313940/article/details/131265058
using namespace std;
using namespace cv;
using namespace cv::cuda;int main()
{// OpenCV版本号cout << "OpenCV_Version: " << CV_VERSION << endl;// CUDAint num_devices = getCudaEnabledDeviceCount();if (num_devices)cout << "CUDA is available, num_devices:" << num_devices << endl;elsecout << "CUDA is not available." << endl;//读取图片Mat img = imread("E:\\Python_Code\\my_left.jpg");imshow("picture", img);waitKey(0);return 0;
}

五、遇到的BUG

在这里插入图片描述

出现了这个错误,但是配置的流程是对的,这个可能是因为,我Conda的protoc版本太高了。
可以看这个帅哥的文章,来解决,链接: link

有问题欢迎评论
水平有限,不足之处还请批评指正

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/145327.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

influxdb-winsdows电脑用户切换 Unauthorized

如果切换winsdows电脑用户之后启动influxdb出现Unauthorized 1.考虑windows用户的权限问题&#xff0c;给full control 2.要把原来用户下的.influxdb中的sqlite给搬到新用户下&#xff0c;因为里面存了数据库的token&#xff0c;需要认证

C++入门基础知识77(实例)——实例 2【标准输入输出】

成长路上不孤单&#x1f60a;&#x1f60a;&#x1f60a;&#x1f60a;&#x1f60a;&#x1f60a; 【14后&#x1f60a;///C爱好者&#x1f60a;///持续分享所学&#x1f60a;///如有需要欢迎收藏转发///&#x1f60a;】 今日分享关于C 实例 【标准输入输出】相关内容&#…

React学习day08-useReducer、useMemo、memo、useCallback、forwardRef、useInperativeHandle

15、useReducer 1&#xff09;作用&#xff1a;用来管理相对复杂的状态数据&#xff0c;类似于useState 2&#xff09;使用步骤&#xff08;传递一般的参数&#xff09;&#xff08;在APP.js中&#xff09;&#xff1a; ①定义一个reducer函数&#xff0c;在函数中通过switc…

技术美术百人计划 | 《4.4 抗锯齿》笔记

前言&#xff1a;文中补充的内容很多来自链接里的&#xff0c;建议看看链接的文章。 一、锯齿 (一) 什么是锯齿 在学习渲染的旅途中&#xff0c;你可能会时不时遇到模型边缘有锯齿的情况。这些锯齿边缘(Jagged Edges)的产生和光栅器将顶点数据转化为片段的方式有关。在下面的…

Mobile net V系列详解 理论+实战(1)

Mobilenet 系列 论文精讲部分0.摘要1. 引文2. 引文3. MobileNet 模型架构3.0 卷积个人理解3.1 深度可分离卷积3.2 网络结构和训练3.3 宽度乘数&#xff1a;更细的模型 α3.4 分辨率乘数&#xff1a;降低表示的维度ρ 4. 实验4.1 模型选择4.2. 模型缩减超参数4.3. 细粒度识别4.4…

人力资源数据集分析(二)_随机森林与逻辑回归

数据入口&#xff1a;人力资源分析数据集 - Heywhale.com 数据说明 字段说明EmpID唯一的员工IDAge年龄AgeGroup年龄组Attrition是否离职BusinessTravel出差&#xff1a;很少、频繁、不出差DailyRate日薪Department任职部门&#xff1a;研发部门、销售部门、人力资源部门Dista…

Linux 进程3

进程地址空间 CPU读取数据都需要地址&#xff0c;在计算机中所有东西都是一种数据&#xff0c;包括我们的进程。 这是一个进程空间示意图&#xff0c;操作系统通过task_struct结构体链表来管理每一个进程&#xff0c;结构体里面有一个指针指向操作系统为进程开辟的一段空间&am…

2-100 基于matlab的水果识别

基于matlab的水果识别。从面积特征、似圆形特征&#xff0c;颜色(rgb值和hsv值)特征对图像中的梨子、苹果、桃子、香蕉和菠萝进行特征提取&#xff0c;边缘检测识别&#xff0c;最后按照筛选出来的特征对水果进行识别。程序已调通&#xff0c;可直接运行。 下载源程序请点链接…

【CustomPainter】渐变圆环

说明 实现一个渐变圆环&#xff0c;起点位置为- π / 2。 效果 源码 GradientCircularPainter1 class GradientCircularPainter1 extends CustomPainter {final double progress;GradientCircularPainter1(this.progress);overridevoid paint(Canvas canvas, Size size) {c…

VCNet论文阅读笔记

VCNet论文阅读笔记 0、基本信息 信息细节英文题目VCNet and Functional Targeted Regularization For Learning Causal Effects of Continuous Treatments翻译VCNet和功能目标正则化用于学习连续处理的因果效应单位芝加哥大学年份2021论文链接[2103.07861] VCNet和功能定向正…

OpenCV特征检测(5)检测图像中的角点函数cornerMinEigenVal()的使用

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 计算用于角点检测的梯度矩阵的最小特征值。 该函数类似于 cornerEigenValsAndVecs&#xff0c;但它计算并存储协方差矩阵导数的最小特征值&…

2024上海工博会,正运动激光振镜运动控制器应用预览(二)

■展会名称&#xff1a; 第二十四届中国国际工业博览会&#xff08;以下简称“上海工博会”&#xff09; ■展会日期 2024年9月24日–28日 ■展馆地点 中国国家会展中心&#xff08;上海&#xff09; ■展位号 6.1H-E261 正运动激光加工控制解决方案主要分为激光振镜运动…

24 小时不关机的挂机云电脑,还能这么玩?

云电脑技术为我们提供了无限可能。特别是对于游戏爱好者&#xff0c;挂机云电脑不仅解决了传统电脑的局限性&#xff0c;还带来了更为便利的游戏体验。除此之外云电脑还有什么其他玩法呢&#xff1f; 01 挂机云电脑的优势 首先要知道&#xff0c;什么是挂机云电脑&#xff1f…

解锁自动化新境界:KeymouseGo,让键盘和鼠标动起来!

文章目录 解锁自动化新境界&#xff1a;KeymouseGo&#xff0c;让键盘和鼠标动起来&#xff01;背景&#xff1a;为何选择KeymouseGo&#xff1f;KeymouseGo简介安装KeymouseGo简单函数使用应用场景常见问题与解决方案总结 解锁自动化新境界&#xff1a;KeymouseGo&#xff0c;…

操作系统 | 学习笔记 | | 王道 | 5.1 I/O管理概述

5.1 I/O管理概述 5.1.1 I/O设备 注&#xff1a;块设备可以寻址&#xff0c;但是字符设备是不可寻址的 I/O设备是将数据输入到计算机中&#xff0c;或者可以接收计算机输出数据的外部设备&#xff0c;属于计算机中的硬件部件&#xff1b; 设备的分类 按使用特性分类&#xff…

from tqdm.auto import tqdm用法详细介绍

tqdm 是一个 Python 库&#xff0c;用于在长时间运行的任务中显示进度条。tqdm.auto 是 tqdm 的一个版本&#xff0c;能够自动适配输出环境&#xff08;如 Jupyter Notebook、命令行等&#xff09;&#xff0c;以确保进度条在各种环境下显示正确。下面是 tqdm.auto 的详细用法介…

英飞凌 PSoC6 评估板 RT-Thread 开发环境搭建

本文介绍如何搭建基于 RT-Thread Studio IDE 工具的 PSoC6 RTT 评估板的开发环境&#xff0c;通过搭建一个简单的工程&#xff0c;将代码编译、下载到 PSoC6 RTT 开发板。 安装软件包 首先需要安装 RT-Thread Studio&#xff0c;如果你还没安装&#xff0c;可以点击这里下载安…

MySQL 中的 UTF-8 与 UTF8MB4:差异解析

在 MySQL 数据库中&#xff0c;字符集的选择对于数据的存储和处理至关重要。其中&#xff0c;UTF-8 和 UTF8MB4 是两个常见的字符集选项。那么&#xff0c;它们之间到底有什么区别呢&#xff1f; 一、字符集简介 UTF-8 UTF-8&#xff08;8-bit Unicode Transformation Format&…

中伟视界:AI边端云一体化管控平台的特色功能介绍及其工作原理

在当前的数字化浪潮中&#xff0c;人工智能&#xff08;AI&#xff09;与物联网&#xff08;IoT&#xff09;技术逐渐渗透到各行各业&#xff0c;而如何在复杂、多层次的技术环境中高效管理和控制这些系统&#xff0c;成为了企业追求自动化、智能化发展的关键挑战。为了满足这种…

docker-compose up 报错:KeyError: ‘ContainerConfig‘

使用命令查看所有容器&#xff1a; docker ps -a 找到有异常的容器删除 docker rm {容器id} 后续发现还是会出现这种情况&#xff0c;尝试使用更高版本的docker-compose后解决