OpenCV 3 - 编译更强大的OpenCV(三) - BUG与崩溃齐飞

这节我们集成Eigen模块并尝试加入CUDA模块(Toolkit 8.0)

下载Eigen

Eigen和OpenCV在一起可以缓解OpenCV在进行某些矩阵计算时性能奇差的尴尬。
我们在官网下载最新的稳定版本:
http://eigen.tuxfamily.org/index.php?title=Main_Page
OpenCV 3 - 编译更强大的OpenCV(三) - BUG与崩溃齐飞_第1张图片
方便起见,我将压缩包的文件扔到了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,里面的文件有:
OpenCV 3 - 编译更强大的OpenCV(三) - BUG与崩溃齐飞_第2张图片

至此就完成了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
OpenCV 3 - 编译更强大的OpenCV(三) - BUG与崩溃齐飞_第3张图片
强烈推荐使用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停止编译,结果。。。
OpenCV 3 - 编译更强大的OpenCV(三) - BUG与崩溃齐飞_第4张图片
源码居然被修改了。。。。体验一下绝望的滋味,只好重头来过,我们第一章再见。

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?
OpenCV 3 - 编译更强大的OpenCV(三) - BUG与崩溃齐飞_第5张图片
但是这真的发生了,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}),这样才能正常生成正确的目录。

(未完待续)

你可能感兴趣的:(OpenCV3)