1. 前言
- 由於opencv 默認編譯的庫文件中是不支持gpu功能的, 爲了開啓gpu 功能, 需要我們手工編譯opencv
- 編譯過程真的都是淚啊!!!
2. 基本環境
- cuda 8.0 https://developer.nvidia.com/cuda-toolkit
- windows 8.1
- cmake 3.7.2 https://cmake.org/download/
- opencv 2.4.9 http://opencv.org/downloads.html
- intel tbb https://developer.nvidia.com/cuda-toolkit
3. 配置cmake
1. 編譯器選擇 ‘Visual Studio 12 2013 Win64′
2. 選上 ‘WITH_CUBLAS’, ‘WITH_CUDA’, ‘WITH_OPENGL’, ‘WITH_TBB’
2. 配置cuda 選項
3. 取消 CUDA_ATTACH_VS_BUILD_RULE_TO_CUDA_FILE’
4. 查詢自己顯卡的架構, 設置合適的CUDA_GENERATION
5. 由於我們的電腦版本是Thinkpad T420i 很老的機子了。。。。查看顯示器可知, 這是nvidia nvs 4200M
6. 然後需要知道nvdia是否支持 http://blog.csdn.net/bendanban/article/details/7595963
6. 查詢 GPU 架構 http://www.notebookcheck.net/NVIDIA-NVS-4200M.47343.0.html
相關 GPU 架構之間的區別: http://www.cnblogs.com/1024incn/p/4539754.html
最直觀的區別是: Fermi 編譯的時候是 compute_2x, Kelper 是 compute_3x, Auto 是 compute_1x (這個是編譯不同過的)
7. 相應的錯誤: Unsupported gpu architecture ‘compute_11’解決方法http://blog.csdn.net/langb2014/article/details/51658744
http://blog.csdn.net/wang4959520/article/details/51392804
- 然後點擊 configure 刷新配置, 並設置相應的tbb
- 把 tbb include path 設置好,例如我的是 “D:\toolkits\tbb43_20140724oss\include”。一定要選到 include文件夾爲止。
- 點擊 Configure 刷新
- 接着可以看到 tbb 的 library 目錄自動有了,但是可能是錯的,需要改到 Debug 和 Release 文件夾的上級目錄爲止。例如我的要加上 ‘vc12*,變成 D:/toolkits/tbb43_20140724oss/lib/intel64/vc12〃(不加vc12的話,opencv_core模塊都編譯不過去,其他的就不用說了)
點擊 Configure 刷新
3. 編譯Opencv.sln
3.1 基本操作
右鍵點擊 ALL_BUILD,在點 BUILD
- BUILD 之後在編譯一下 INSTALL,來把編譯好的文件放在一起到 \install
- 在切換到 Release,重複 ALL_BUILD 和 INSTALL
- Debug 應該會有一個 error
這個錯誤是因爲我們默認安裝的python 是不提供這個文件的, 如果需要可以手工編譯下, 這裏我們忽略這個錯誤
- Release 應該會沒有 error
最後將 install 中的文件就是我們編譯生成的文件了
3.2 遇到的一些bug
- NVC.cu, 編譯這個文件的時候(gpu 模塊)報std 沒有max min 成員, 添加一個algorithm 頭文件即可
- SURF_GPU 未聲明的標識符 這是因爲opencv2.4.x 中, 將sift, surf 特徵算子都移動到了non_free 中, 修改下頭文件包含路徑即可
http://blog.csdn.net/holybin/article/details/41144705
- HANDLE 未標識, 加入 windows.h 即可
- cudalegacy not compile – nppiGraphcut missing
http://answers.opencv.org/question/95148/cudalegacy-not-compile-nppigraphcut-missing/ - 編譯器堆空間不足, 清理下多餘的應用, 最好只讓vs 單獨跑