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
一、环境总览
名称 | 版本 |
---|---|
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
有问题欢迎评论
水平有限,不足之处还请批评指正