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

news2024/9/20 14:33:29

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;
	// CUDA
	int num_devices = getCudaEnabledDeviceCount();
	if (num_devices)
		cout << "CUDA is available, num_devices:" << num_devices << endl;
	else
		cout << "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.coloradmin.cn/o/2149141.html

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

相关文章

前端——表格、列表标签

今天我们来学习一下web开发里面的表格标签、列表标签 常用快捷键&#xff1a; shift alt 下 复制粘贴选中内容 表格标签 table HTML 表格由 <table> 标签来定义。 HTML 表格是一种用于展示结构化数据的标记语言元素。 每个表格均有若干行&#xff08;由 <tr>…

yolov5测试代码

一般源码的测试代码涉及很多文件&#xff0c;因项目需要写一个独立测试的代码。传入的是字典 import time import cv2 import os import numpy as np import torch from modules.detec.models.common import DetectMultiBackend from modules.detec.utils.dataloaders import …

京东商品属性的详细api数据解析:颜色、尺寸与材质

京东&#xff08;JD.com&#xff09;作为一个大型电商平台&#xff0c;其商品信息通过API接口提供给开发者或第三方服务使用&#xff0c;以便进行商品搜索、展示、分析等操作。然而&#xff0c;直接访问京东的详细商品属性&#xff08;如颜色、尺寸、材质等&#xff09;API通常…

数据的表示和存储 第2讲 定点数的编码表示

​ 互联网行业 算法研发工程师 ​ 全文概括&#xff1a; 本讲介绍了定点数的编码表示&#xff0c;主要包括原码、补码和移码。 原码表示方式简单&#xff0c;正数用0表示&#xff0c;负数用1表示&#xff0c;但存在表示不唯一和加减运算不统一的问题。 补码表示方式解决了…

zabbix“专家坐诊”第256期问答

原作者&#xff1a;乐维社区 原文链接&#xff1a;https://forum.lwops.cn/questions 问题一 Q&#xff1a;zabbix 6.4.18版本的&#xff0c;使用zabbix_agentd2监控mysql数据库&#xff0c;只能在界面配置mysql的相关信息吗&#xff1f;这个在zabbix表里面是明文存储的&#x…

集采良药:从“天价神药”到低价良药,伊马替尼的真实世界研究!

在医疗科技日新月异的今天&#xff0c;有一种药物以其卓越的疗效和深远的影响力&#xff0c;成为了众多患者心中的“精准武器”——伊马替尼。这款药物不仅在慢性髓细胞白血病&#xff08;CML&#xff09;的治疗上屡创佳绩&#xff0c;更是胃肠道间质瘤&#xff08;GIST&#x…

微信小程序自定义navigationBar顶部导航栏(背景图片)适配所有机型,使用tdesign-miniprogram t-navbar设置背景图片

设置导航栏样式自定义 一定要设置&#xff0c;不然页面会出现一个原生的导航栏&#xff0c;一个自定义的 // app.json文件 "window": {"navigationStyle": "custom" }设置导航栏样式 我这里使用tdesign-miniprogram t-navbar&#xff0c;t-na…

大模型的热度正在下降,大模型的未来在哪里?

“ 技术是一个需要沉淀和厚积薄发的过程 ” 任何事物都会经过起步&#xff0c;发展&#xff0c;顶峰&#xff0c;平稳&#xff0c;下降&#xff0c;灭亡的过程&#xff0c;大模型技术也不例外。 而从现今的趋势来看&#xff0c;大模型的热度正在不断下降&#xff0c;这到底意…

虫情测报灯的工作原理

型号&#xff1a;TH-CQ1】虫情测报灯是一种专门用于监测农田、林区等环境中昆虫数量和种类的设备&#xff0c;也称为智能虫情测报灯或物联网虫情测报灯。它通过特定的光源和颜色吸引昆虫&#xff0c;并利用高压电网或远红外自动处理技术等手段将昆虫击杀或处理&#xff0c;从而…

《黑龙江水产》是什么级别的期刊?是正规期刊吗?能评职称吗?

问题解答 问&#xff1a;《黑龙江水产》是不是核心期刊&#xff1f; 答&#xff1a;不是&#xff0c;是知网收录的第一批认定 学术期刊。 问&#xff1a;《黑龙江水产》级别&#xff1f; 答&#xff1a;省级。主管单位&#xff1a;黑龙江省农业农村厅 …

【QT】系统-下

欢迎来到Cefler的博客&#x1f601; &#x1f54c;博客主页&#xff1a;折纸花满衣 &#x1f3e0;个人专栏&#xff1a;QT 目录 &#x1f449;&#x1f3fb;QTheadrun() &#x1f449;&#x1f3fb;QMutex&#x1f449;&#x1f3fb;QWaitCondition&#x1f449;&#x1f3fb;Q…

视频存储EasyCVR视频监控汇聚管理平台设备录像下载报错404是什么原因?

EasyCVR视频监控汇聚管理平台是一款针对大中型项目设计的跨区域网络化视频监控集中管理平台。该平台不仅具备视频资源管理、设备管理、用户管理、运维管理和安全管理等功能&#xff0c;还支持多种主流标准协议&#xff0c;如GB28181、RTSP/Onvif、RTMP、部标JT808、GA/T 1400协…

基于SpringBoot的智能排课系统设计与实现

文未可获取一份本项目的java源码和数据库参考。 &#xff08;一&#xff09;选题来源与背景 高校的每学期伊始&#xff0c;排课是教务处工作中的重中之重。安排合理无资源冲突&#xff08;教师、教室和设备等教学资源&#xff09;的课表是教务工作必须面临的问题。传统的人工…

规模化电动汽车接入配电网调度方法

规模日益增长的电动汽车和可再生能源带来的不确定性给配电网的安全运营带来了严峻挑战。为综合考虑多重不确定性、平衡运营成本与系统可靠性,首先,提出一种基于分布鲁棒联合机会约束的电动汽车-配电网充放电调度模型。该模型将节点电压、支路功率、备用需求等通过联合机会约束建…

由一个 SwiftData “诡异”运行时崩溃而引发的钩深索隐(六)

概述 在 WWDC 24 中,苹果推出了数据库框架 SwiftData 2.0 版本。听说里面新增了能让数据记录“借尸还魂”的绝妙法器,到底是真是假呢? 我们在上篇博文中介绍了 History Trace 是如何稳妥的处理数据删除操作的。而在这里,我们将继续介绍 SwiftData 2.0 中另一个新特性:“墓…

Prometheus - nVisual插件让运维更轻松

Prometheus 是一个开源的服务监控系统和时间序列数据库&#xff0c;常用于对基础设施的监控&#xff0c;监控范围涵盖了硬件层、操作系统层、中间件层、应用层等运维所需的所有监控指标类型&#xff0c;同时可利用第三方可视化工具Grafana实现时序数据的展示。然而&#xff0c;…

Redis基础(数据结构和内部编码)

目录 前言 Redis的数据结构和内部编码 string结构和内部编码 string数据机构的特点 string数据结构的内部编码 list结构和内部编码 List 数据结构的特点 List 的内部编码 1. ziplist&#xff08;压缩列表&#xff09; 2. quicklist hash结构和内部编码 hash数据结构…

OpenCV特征检测(3)计算图像中每个像素处的特征值和特征向量函数cornerEigenValsAndVecs()的使用

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 计算图像块的特征值和特征向量用于角点检测。 对于每一个像素 p &#xff0c;函数 cornerEigenValsAndVecs 考虑一个 blockSize blockSize 的邻…

Java 在 GIS 领域的学习路线?

Java是一门广泛应用于企业级开发的编程语言&#xff0c;而GIS则是一种常用于地理信息处理和分析的技术。将Java与GIS结合起来&#xff0c;可以在企业级应用中实现更多的功能和业务需求&#xff0c;且在实际领域越来越广泛。 Java在GIS中重要的作用 1、跨平台性 Java具有跨平台…

基于C语言+SQL Server2008实现(控制台)图书管理系统

第1章 概述 1.1项目背景 随着科技的发展&#xff0c;尤其是计算机技术的迅猛发展&#xff0c;图书馆管理的问题从以往的人工管理&#xff0c;到现在的电脑化&#xff0c;系统化&#xff0c;是对图书馆管理方法的质的飞跃&#xff0c;这些技术不仅让图书馆管理变得更加方便、快…