目标
编译opencv349和扩展库在vs2015, cuda10.1, 使用sift角点检测库
前提工作
下载 vs2015(非必须)
https://mp.weixin.qq.com/s/oOAxsbAEBigxvp356yINQQ
安装时勾选通用 Windows 平台开发(包括其子选项C++ 通用 Windows 平台工具)、使用 C++ 的桌面开发 以及 使用 C++ 的 linux 开发
下载显卡驱动并安装:(必须)
https://www.nvidia.cn/Download/index.aspx?lang=cn
下载 CUDA 10.1(你不编译cuda版本就不要)
https://developer.nvidia.com/cuda-downloads
建议下载至默认路径
安装完毕自动添加到系统路径
下载cuDNN v7.6.1
https://developer.nvidia.com/cudnn
需要注册 Nvidia 账号,cuDNN版本是与 CUDA 版本对应的,下载什么版本的 CUDA 就应该下载与之对应的 cuDNN 版本,此处 cuDNN v7.6.1与 CUDA 10.1对应。
下载后把压缩包内的bin、include、lib三个文件夹复制到C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.1\文件夹下,覆盖原有的bin、include、lib。
下载CMake 大于3.11(必须)
0 下载最新的win10 sdk (必须)
查看原始选择的SDK是否为10.0.10586.0,如果是选择其他版本的SDK。并重新Configure和Generate。不然后面一堆库因为SDK版本问题无法生成
打开官网下载 SDK
https://developer.microsoft.com/zh-cn/windows/downloads/windows-10-sdk/
显示最新的10.0.19041.1要被安装
打开VS2015工程的时候验证是否存在
Step 1. 下载源码
opencv https://github.com/opencv/opencv/releases (各个版本都有)
opencv_contrib https://github.com/opencv/opencv_contrib/releases (各个版本都有)
注意:二者版本要一致!
Step 2. 使用CMake开始编译
Cmake我是3.10版本的,之前下载安装的。CMake的安装网上还是有很多教程的,可百度一下。
编译时需要填两个文件路径,
(1)opencv3.4.9安装路径:F:\dongdong\0tool\navidia_cuda_opencv\OPENCV\Opencv349\opencv-3.4.9
(2)目标文件(即编译后的工程文件)路径:F:\dongdong\0tool\navidia_cuda_opencv\OPENCV\Opencv349\opencv-3.4.9\build
注意1:此处要根据你的安装地址来填。
注意2:要根据你所用的VS版本和系统位数来选,比如我的 VS2015+x64(64位系统)。
WC 这个x64一定要选择 不然是默认的win32 导致我后面死活生成不成功
结束后
报错问题
中间一些报错 主要是有些库下载不了 查看报错记录 ,看看哪些该下载的没有下载
一般这里只会报错一个python神的错,不用管。
1手动下载,并改名字一样放在临时的下载文件夹
2直接找个好一点的网络 ,开启某飞机就能强出去。让他自己直接下载。
Step 3. 使用CMake再次编译
1扩展库
选择opencv_contrib中的module文件目录,填在opencv_extra_module_path选项中,再一次configure。
我的opencv_contrib中的module文件目录为: F:\dongdong\0tool\navidia_cuda_opencv\OPENCV\Opencv349\opencv_contrib-3.4.9\modules
2 为了能使用sift角点特征检测,使能nonfree
(为什么是nonfree?因为sift拿来商用不是免费的 - -)
3 选择cuda(根据需要求)
查看当前的cuda版本,确保配置的cuda版本装好了
cuda路径没问题,确认当前版本确实是 10.1
4 关于world问题(根据需求)
我这里没有选择,选择了直接生成一个库,虽然方便调用,但是整体杂糅在一个里面不方便。看个个人情况。
5 基本样例和文档(一些默认的样例工程 根据自己需求)
examples
docs
重新点击配置,等待结束。
成功后
点击生成
报错问题
报错问题1 缺少ffmpeg库
https://blog.csdn.net/star_of_science/article/details/104406819
因为无法访问外网,自然就无法连接到下载服务器。那就直接通过外网下载好需要的文件,然后重命名为"md5-文件名",(md5就是前面跟的一堆数字和字母)放在 /.cache/ffmpeg/ 文件夹下面,或者直接放到目标路径 /3rdparty/ffmpeg/opencv_ffmpeg.dll(不用重命名)。
1手动下载,并改名字一样放在临时的下载文件夹。需要飞机强才能去下载。
1ffmped一共要下载2个库和一个cmake
注意:
1.https://raw.githubusercontent.com/opencv/opencv_3rdparty/fe71c0ad807fdc33c2178e48e488f1e9b177c39a/ffmpeg/ffmpeg_version.cmake 无法直接下载,
而是直接打开了ffmpeg_version.cmake,可以右键网页选择另存为 ffmpeg_version.cmake.txt,然后再改为ffmpeg_version.cmake。
这里如果自己新建一个txt,然后直接将网页上的内容拷进去,然后再该后缀为.cmake是不行的,会提示md5不匹配。
2.不同版本的OpenCV对应的 opencv_ffmpeg.dll 等缺失文件的 md5 签名是不一样的
报错问题2 缺少ippicv库
根据报错记录手动去下载放在对应位置
重新运行不再有上面的报错,且下载文件记录错误没有
报错问题3 缺少 opencv_xfeatures2d需要的文件
这个问题在这个时候没有显示出来,先往后面走吧
总之最后需要根据报错日志下载这些文件,放在对应文件夹
报错问题4 路径中/ \问题导致找不到扩展库
解析路径错误,估计是原有名字里的 - 和 . 导致了文件名解析问题??? 我把扩展库文件夹名字改了下,
原来
F:\dongdong\0tool\navidia_cuda_opencv\OPENCV\Opencv349\opencv_contrib-3.4.9\modules
现在
F:\dongdong\0tool\navidia_cuda_opencv\OPENCV\Opencv349\opencv_contrib_349\modules
还是报错 ,我看到camke默认其他路径都是 / ,看样子是 / 和 \ 问题了
再次修改
1 | F:/dongdong/0tool/navidia_cuda_opencv/OPENCV/Opencv349/opencv_contrib_349/modules |
再次最终cofigure
成功!
开始编译VS2015
完成后直接点击open project或者到编译输出目录下找到OpenCV.sln使用自己的VS打开此解决方案
第一次打开 默认是 debug x64平台 直接生成就是带 d的库 . 但是我需要的是 relase x64, 所以修改生成平台。
(检验正确:因为前面cmake最开始选择平台的时候没有选择 VS2015 win64平台,默认32,工程打开默认是 debug win32,我手动改成x64 ,一直报错目标平台为 32不符合,折腾了一晚上我去)
打开解决方案后在x64 relase下重新生成解决方案,生成得库都是不带d的。(同理在debug下面生成得都是带d的库)
重新生成过程中如果遇到提示“某个项目外部环境已更改”,选择全部重新加载即可。
配置CUDA的情况下,重新生成解决方案的时间很长,平均都要2-3小时,耐心等待吧。
哇 漫长几个小小时后,提示“某个项目外部环境已更改”,选择全部重新加载即可。(不要选择重新生成解决方案,而是直接生成解决方案)
又过了10几分钟结束。
输出一些报错
报错问题1 win10 sdk没有更新带来的问题。
win10 sdk没有跟新的缘故,这个我在开头就写了要提前跟新win10 sdk,所以你现在应该不会遇到这个问题。
导致后面
https://www.pianshen.com/article/1371144793/
解决方法
这个需要一开始cmake就要安装好
查看原始选择的SDK是否为10.0.10586.0,如果是选择其他版本的SDK。并重新Configure和Generate。
打开官网下载 SDK
https://developer.microsoft.com/zh-cn/windows/downloads/windows-10-sdk/
显示最新的10.0.19041.1要被安装
然后重新camke 提示从 10.0.19041切换到了 10.0.18362(我都没装10.0.18362他怎么就自动切换过去了)
不管了直接编译
完成后打开vs工程 ,发现平台这 个地方,有最新的 10.0.19041,但是上个版本就是10.0.10586.0,所以这个应该是之前报错的原因。
不管了只要不是10.0.10586.0,继续生成往生成解决方案。
等待安装完成。
哇 看到这个库中终于生成了 opencv_videoio349,dll 那就是WIN10 sdk 10.0.10586.0本版导致的问题
你以为结束了么,NO 整个解决方案 还有别的报错4个
问题2 xfeatures2d没有生成问题
xfeatures2d需要依赖一些文件 ,camke时候没有下载到,而且那个时候也不会显示出来,需要手动下载这些库到指定文件夹,然后重新cmake生成,打开工程生成解决方案。
但是报错信息太多找不到那个错了,直接 单独生成下install,看看哪些库没生成。
这个成功没用,缺少的库还是没生成,查看库路径
但是没找到 关于siff的库,而且在解决方案的报错里我看到有一条 xfeatures2d什么的报错,我们在次生成下解决方案
千万别选择 重新生成,不然又是一天
这次报错信息明显少了
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 | 1>------ 已启动生成: 项目: opencv_xfeatures2d, 配置: Release x64 ------ 1> boostdesc.cpp 1> vgg.cpp 1>F:\dongdong\0tool\navidia_cuda_opencv\OPENCV\Opencv349\opencv_contrib_349\modules\xfeatures2d\src\boostdesc.cpp(654): fatal error C1083: 无法打开包括文件: “boostdesc_bgm.i”: No such file or directory 1>F:\dongdong\0tool\navidia_cuda_opencv\OPENCV\Opencv349\opencv_contrib_349\modules\xfeatures2d\src\vgg.cpp(490): fatal error C1083: 无法打开包括文件: “vgg_generated_120.i”: No such file or directory 2>------ 已启动生成: 项目: opencv_perf_xfeatures2d, 配置: Release x64 ------ 3>------ 已启动生成: 项目: opencv_stitching, 配置: Release x64 ------ 2>LINK : fatal error LNK1181: 无法打开输入文件“..\..\lib\Release\opencv_xfeatures2d349.lib” 3> opencv_stitching_pch.cpp 3>F:\dongdong\0tool\navidia_cuda_opencv\OPENCV\Opencv349\opencv-3.4.9\modules\stitching\include\opencv2/stitching/detail/matchers.hpp(52): fatal error C1083: 无法打开包括文件: “opencv2/xfeatures2d/cuda.hpp”: No such file or directory 4>------ 已启动生成: 项目: opencv_test_xfeatures2d, 配置: Release x64 ------ 4>LINK : fatal error LNK1181: 无法打开输入文件“..\..\lib\Release\opencv_xfeatures2d349.lib” 5>------ 已跳过生成: 项目: opencv_modules, 配置: Release x64 ------ 5>没有为此解决方案配置选中要生成的项目 6>------ 已跳过生成: 项目: gen_opencv_python_source, 配置: Release x64 ------ 6>没有为此解决方案配置选中要生成的项目 7>------ 已跳过生成: 项目: gen_opencv_java_source, 配置: Release x64 ------ 7>没有为此解决方案配置选中要生成的项目 8>------ 已跳过生成: 项目: RUN_TESTS, 配置: Release x64 ------ 8>没有为此解决方案配置选中要生成的项目 9>------ 已跳过生成: 项目: uninstall, 配置: Release x64 ------ 9>没有为此解决方案配置选中要生成的项目 10>------ 已跳过生成: 项目: opencv_perf_tests, 配置: Release x64 ------ 10>没有为此解决方案配置选中要生成的项目 11>------ 已跳过生成: 项目: opencv_tests, 配置: Release x64 ------ 11>没有为此解决方案配置选中要生成的项目 12>------ 已跳过生成: 项目: INSTALL, 配置: Release x64 ------ 12>没有为此解决方案配置选中要生成的项目 13>------ 已跳过生成: 项目: PACKAGE, 配置: Release x64 ------ 13>没有为此解决方案配置选中要生成的项目 ========== 生成: 成功 0 个,失败 4 个,最新 169 个,跳过 9 个 ========== |
关键报错问题
编译OpenCV 以及 openc_contrib 提示缺少boostdesc_bgm.i文件出错
https://blog.csdn.net/qq_38131812/article/details/90292703
解决方式:
查看build文档下的CMakeDownloadLog.txt文件,搜索boostdesc_bgm.i,Log里有它的下载地址,直接复制地址到网页可以得到文件的源码,直接在 opencv_contrib/modules/xfeatures2d/src/ 路径下并拷贝其源码即可。
总共缺了以下几个文件:
显示成功1,失败后面都是0,恭喜就表示生成成功了。
1 2 3 4 5 6 7 8 9 10 11 | boostdesc_bgm.i boostdesc_bgm_bi.i boostdesc_bgm_hd.i boostdesc_lbgm.i boostdesc_binboost_064.i boostdesc_binboost_128.i boostdesc_binboost_256.i vgg_generated_120.i vgg_generated_64.i vgg_generated_80.i vgg_generated_48.i |
查看报错日志 果然是,那就手动下载吧
1 | https: //raw.githubusercontent.com/opencv/opencv_3rdparty/34e4206aef44d50e6bbcd0ab06354b52e7466d26/boostdesc_bgm.i |
直接访问还打不开,开启某飞机,就刷出来了,那是不是我配置的时候开着,后面就不报错这问题
1要么一个个下载 手动放过去对应文件夹,肯定可以。
重新打开VS工程 清理之前的生成
重新生成
2我直接重新 生成一下,在某飞机运输下自己动下载吧,但是他还是没能下载,只能1手动下载别偷懒了。
再次打开VS2015工程,提示全部重新加载,再次生成
结束后
尼玛呀,还有两个错误
先单独生成install 确保起码xfeatures2d生成了。
确实生成了
报错3 未知
继续解决剩下两个错误,初步感觉这个两个不影响大局使用先忽略。
使用opencv3.4.9
配置项目属性
生成成功之后,在目的路径会新生成一个Install文件夹,该文件夹就相当于结合了opencv_contrib的opencv库目录。
1、将目的路径 F:\dongdong\0tool\navidia_cuda_opencv\OPENCV\Opencv349\opencv-3.4.9\build\install\x64\vc14\bin路径加入到电脑的环境变量当中
2、按照正常步骤配置opencv就行了。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· winform 绘制太阳,地球,月球 运作规律
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人