使用CUDA和QT选项编译OpenCV

1. 为什么要自己编译?

默认下载的安装程序没有开这两个选项。由于不同GPU对应的也不一样,也很难让默认配置就打开这两个选项。使用CUDA目的很明显:一切为了速度。至于为什么要打开QT选项,下图比较能说明问题。和QT一起编译之后,可以极大地方便调试。我们可以很方便的放大、缩小图像,查看其某个像素的坐标,RGB值。

qtgui

 

2. 是不是很轻松就搞定?

据我的经验,貌似不是特别轻松。我用Visual studio习惯了。对于函数库,比较习惯于拿过一个工程过来直接编译。然而OpenCV编译的时候不是这么直接,需要先用CMake创建一个visual studio工程,再进行编译(详见:VS下用CMake编译OpenCV程序

我最先用的是QT的某个最新版本:qt-windows-opensource-5.1.1-msvc2012_opengl-x86_64-offline.exe 。碰到了一个找不到opengl的问题,解决方案是加一行代码: http://www.qtcentre.org/threads/56185-cmake-error-with-Failed-to-find-quot-glu32-quot-in-quot-quot。QT这关就这样过去了。我这里都用的是64位,现在机器能力比较好,用64位可以少很多麻烦,给自己节省时间。

和CUDA一起编译也不是很顺利,我用的是5.5版本的CUDA Toolkit。这个编译起来不是一般的慢呀。经过了好多个小时的漫长等待,迎来了一堆的错误。现象和解决方案在这里:http://answers.opencv.org/question/18110/building-opencv-246-with-cuda-55rc-in-vs2012/ 。简单一句话就是在编译之前在CMake中关掉这个选项:CUDA_ATTACH_VS_BUILD_RULE_TO_CUDA_FILE 。不知道为什么这个会导致编译错误的选项会是一个默认选项,不管怎么样,过了就好。改过来之后,又是几个小时的漫长等待。

至于为什么编译会这么慢,以及解决方案,请看这里:http://answers.opencv.org/question/5090/why-opencv-building-is-so-slow-with-cuda/。罪魁祸首是i)每种GPU Compute Capability编译出一个东东,ii)cuda中的kernel程序不支持多态(polymorphic),每种类型(CV_8UC1CV_32FC3, 等等)也得编译出一个东西与之对应,iii)template用的太多。