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

一、环境总览

名称 版本
Windows 11
Visual Studio 2019P
Cmake 3.23.0
Opencv 4.4.0
Opencv_contrib 4.4.0
Cuda Toolkit 11.8
Cudnn 8.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

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

猜你喜欢

转载自blog.csdn.net/m0_58326153/article/details/142333462