OpenCV 3 - 编译更强大的OpenCV(三) - BUG与崩溃齐飞
来源:互联网 发布:网络剧怎么赚钱 编辑:程序博客网 时间:2024/04/30 01:40
这节我们集成Eigen模块并尝试加入CUDA模块(Toolkit 8.0)
下载Eigen
Eigen和OpenCV在一起可以缓解OpenCV在进行某些矩阵计算时性能奇差的尴尬。
我们在官网下载最新的稳定版本:
http://eigen.tuxfamily.org/index.php?title=Main_Page
方便起见,我将压缩包的文件扔到了C:\opencv310\sources
文件夹。
CMake中对Eigen配置
不与上一节的内容重复,在这里只讲额外配置Eigen的步骤:
通过search找到WITH_EIGEN
并打钩,然后找到EIGEN_INCLUDE_PATH
项,将目录选到解压文件夹即可:
在网上查了一下,没有明确说明在编译OpenCV时什么是Eigen的include path,配置起来让人摸不着头脑。
现在明确告诉你,C:\opencv310\sources\eigen-eigen-26667be4f70b
就是所需的include path。
参考一下,我当前的包解压后位于C:\opencv310\sources\eigen-eigen-26667be4f70b
,里面的文件有:
至此就完成了Eigen在OpenCV中编译的配置。
安装CUDA Toolkit
切记确保你的电脑有老黄家的N卡,而不是A卡或者只有核显,理由就不用多解释了吧,在京东买东西居然想用蚂蚁花呗。。。
另外请确定你的GPU的CUDA计算能力不低于2,否则不被现有的CUDA Toolkit支持。低于2的,如果不是为了解码,我觉得你用CUDA处理还没CPU快,具体在此查询:https://developer.nvidia.com/cuda-gpus。
本人笔记本上的750M计算能力为3.0。个人觉得目前较具性价比的是1050Ti,入门可以拿来玩玩。
玩游戏就算了,玩游戏我推荐RX480NITRO+ 。。。
安装程序在此下载:
https://developer.nvidia.com/cuda-downloads
强烈推荐使用IDM开32线程下载local安装包。
下载完成后运行,等待安装程序的解压缩。
安装程序运行起来后选择自定义安装,将组件全选,一路下一步。
期间可能会先卸载你的显卡驱动,并提示你重启电脑。重启后重新解压运行,重来一遍即可正常安装。
CMake中对CUDA配置
配置前一定要确保安装程序完成安装,并重启电脑让环境变量生效。
在这里只讲额外配置CUDA的步骤:
建议勾选:WITH_CUBLAS CUDA_FAST_MATH不建议勾选:WITH_NVCUVID
configure更新配置,看一下输出的summary中的CUDA内容,本人输出如下:
NVIDIA CUDA
Use CUFFT: YES
Use CUBLAS: YES
USE NVCUVID: NO
NVIDIA GPU arch: 20 21 30 35
NVIDIA PTX archs: 30
Use fast math: YES
至此便完成了CUDA在OpenCV中编译的配置。
BUG与崩溃齐飞
照上述配置加入CUDA后,你可以顺利地generate后启动项目,对着INSTALL右击生成,马上映入眼帘的就是蹦来蹦去的:
LINK : warning LNK4044: 无法识别的选项“/LC:/Program Files/NVIDIA GPU Computing Toolkit/CUDA/v8.0/lib/x64”;已忽略
紧接着就会看到:
C:\opencv310\sources\opencv\opencv-3.1.0\modules\core\include\opencv2/core/core.hpp(494):
warning : field of class type without a DLL interface used in a class with a DLL interface
于是你赶紧Ctrl+break停止编译,结果。。。
源码居然被修改了。。。。体验一下绝望的滋味,只好重头来过,我们第一章再见。
trouble shooting- CMake脚本问题
这个地方坑了我好久,最后还是将注意力放在奇怪的路径:
“/LC:/Program Files/NVIDIA GPU Computing Toolkit/CUDA/v8.0/lib/x64”
C盘怎么前面出现一个/L?还不加空格。。。
于是Google一把:
http://stackoverflow.com/questions/36317625/opencv-wont-build-with-cuda-even-though-with-cuda-on-in-cmake
原来是CMakeLists里面有人打错字了。。。Excuse me?
但是这真的发生了,interesting。我猜吧,应该是想打Lib的其他信息,结果是睡着了还是咋的了打个L就没下文了。。。
我们打开源码的CMakeLists,找到这句: set(OPENCV_LINKER_LIBS ${OPENCV_LINKER_LIBS} -L${p})
把它替换为 set(OPENCV_LINKER_LIBS ${OPENCV_LINKER_LIBS} ${CMAKE_LIBRARY_PATH_FLAG}${p})
,这样才能正常生成正确的目录。
(未完待续)
- OpenCV 3 - 编译更强大的OpenCV(三) - BUG与崩溃齐飞
- OpenCV 3 - 编译更强大的OpenCV(三) - BUG与崩溃齐飞(续1s)一点小补充
- OpenCV 3 - 编译更强大的OpenCV(一) - 准备
- OpenCV 3 - 编译更强大的OpenCV(二) - 拼人品时刻
- openCV mingw+cmake编译的bug/error笔记
- DM8168 OpenCV尝试与评估(编译ARM版OpenCV)
- windows下OpenCV的编译与配置过程(Qt)
- OpenCV库的安装与编译
- OpenCV (Linux下的编译与安装)
- OpenCV中cvBlobsLib的编译与使用
- ubuntu下opencv的编译与配置
- opencv bug
- opencv BUG
- 生成opencv解决方案与opencv源码编译
- opencv-python的bug解决方法
- Opencv 的交叉编译
- openCV编译的坑
- OpenCV的源代码编译
- 如何找出一个字符串中第一次且只出现一次的字符
- 计算机网络:传输层和网络层
- 常用逻辑芯片
- spring mvc 的Controller类是单例(singleton)的吗?
- 拖欠的Java笔记
- OpenCV 3 - 编译更强大的OpenCV(三) - BUG与崩溃齐飞
- C++实现操作系统进程调度(时间片轮转法)
- [十一]java作业
- 51Nod 1278 相离的圆
- poj 3259 Wormholes
- python file
- Spring MVC 静态概念
- (笔记)Spring MVC学习指南_数据绑定和表单标签库
- python 正则表达式