首先說明的是,這個文章是成功的編譯了dll,但是這個dll使用的時候還是很容易出現各種問題的。
發現錯誤可能是由于系統安裝了太多版本的opencv,環境變量的設定混亂,造成dll版本加載不對的問題。
更新:下面這篇文章裡面有加速編譯的設定辦法:但是編譯器采用了vs2012,我根據他的所有軟體版本換了編譯器,以及QT庫,需要特别注意的是,這些庫的相應作業系統版本32bit 或者64bit版本
QT早期版本下載下傳位址:
下面這個網址能夠找到qt的各個版本
<a target="_blank" href="http://download.qt-project.org/archive/qt/">http://download.qt-project.org/archive/qt/</a>
下面是教程位址:
<a target="_blank" href="http://www.xuebuyuan.com/2108717.html">http://www.xuebuyuan.com/2108717.html</a>
2014.10.23
嚴格根據上文的軟體跟庫版本是可以編譯設定成功的。
Motivation:
之前在西電跟同學聽了圖像方面的講座,受益匪淺啊。人家學校的老師大多都是搞sar雷達圖像的,動辄20000*30000的高分辨率。算法再怎麼優化,一套流程下來至少算十天半個月。這改個參數算算等不起啊,最後發現搞這個不上GPU根本就不行,于是我想啊講GPU引入我的這個自然圖像處理跟,stereo matching,的graph cuts算法中,應該也能夠得到性能的大幅度提升。
由于之前一直在看OpenCV這個圖像處理庫的相關内容,是以先搜了一下看看OpenCV這個庫有沒有直接對CUDA加速進行支援的,我打開電腦一看OpenCV的dll庫後面的字尾帶了_gpu就直接貼了代碼在那調試呢。結果是,小白了。自己要安裝CUDA toolkit并且結合OpenCV編譯一遍的。
由于我的筆記本電腦是神舟的,顯示卡是NVIDIA GTX 765我也沒看,直接去官網下了個最新的CUDA TOOLKIT 6.5就開始整了,最後發現,人家有專門針對筆記本的notebook版本的,傻了一天白幹了,之後發現這個版本過高,還是下了notebook的5.5版本。
最新的6.5可能是給8系,9系的新卡用的吧,我也不是很清楚,最後搞完這一套配置終于明白為啥,linux之父最讨厭nvidia了,這程式之間也是亂七八糟的關系相容不相容的,官網早期版本的sdk都找不到,哎。。。

使用Cmake的時候,有幾點要注意的,選擇Visual Studio 2010的版本應該為win64這樣在win7 64bit版本下面生成的OpenCV才是正确的。
vs2010主要有兩種模式,分别是debug 和 release。 模式可以通過如圖所示的位置選擇。需要注意的是,因為先前我們cmake采用的是64位VS10編譯器,在這裡需要選擇編譯器x64, 而不是win32, 否則會出錯。
整體的過程參考了下面的連結:
<a target="_blank" href="http://www.xuebuyuan.com/722557.html">http://www.xuebuyuan.com/722557.html</a>
<a target="_blank" href="http://blog.csdn.net/fengbingchun/article/details/9831837">http://blog.csdn.net/fengbingchun/article/details/9831837</a>
安裝完成後,在系統環境裡面會發現新添加了兩個環境變量:(環境變量挨個添加吧,不要怕麻煩)
CUDA_PATH = C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.0\
CUDA_PATH_V5_0 = C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.0\
手動配置環境變量。在系統環境變量中建立如下項:
CUDA_SDK_PATH = C:\ProgramData\NVIDIA Corporation\CUDA Samples\v5.0
CUDA_LIB_PATH = %CUDA_PATH%\lib\X64
CUDA_BIN_PATH = %CUDA_PATH%\bin
CUDA_SDK_LIB_PATH = %CUDA_SDK_PATH%\common\lib\x64
CUDA_SDK_BIN_PATH = %CUDA_SDK_PATH%\bin\win64
然後在系統環境變量Path 後添加如下内容:
;%CUDA_LIB_PATH%;%CUDA_BIN_PATH%;%CUDA_SDK_LIB_PATH%;%CUDA_SDK_BIN_PATH%;
3. 安裝TBB
去http://threadingbuildingblocks.org/download 下載下傳tbb41_20130314oss_win.zip解壓到某路徑
本人D:\tbb41_20130314oss
添加環境變量D:\tbb41_20130314oss\bin\intel64\vc10
編譯過程有兩點,可能出現:
1.配置的時候别忘了:添加兩個路徑,尤其是OpenCV的一個lib庫不然 編譯有的庫找不到,編譯不成功。
這個庫不需要設定!!!(後來發現!!!)
2.整個編譯的過程非常的緩慢,并且出現在編譯OpenCV_gpu這個子產品的時候,出現c4819錯誤感覺非常影響速度,這個你要回到相應的cuda檔案中,另存為unicode格式就好
i7的處理器大概能編譯3個小時左右。。。
加速方法,可以縮短到一個小時左右!就是隻針對響應的顯示卡版本進行設定:
由于這樣直接生成的解決方案需對不同的GPU架構分别編譯,編譯時間過長(數小時),
建議針對所用顯示卡進行配置(據稱可達原時間六分之一):
找到如下兩項
清空CUDA_ARCH_PTX,将CUDA_ARCH_BIN中僅保留所需GPU架構,
重新configure。(建議使用以上方法先編譯一邊,确定沒有錯誤,再為所有架構重新編譯,花了四天的時間得到的教訓)
以上是轉載的内容,這裡要說幾個需要注意的地方:
1.本文中采用的是Cmake2.8.8版本,我用過2.8.12就會出現過很多本文中未提到的錯誤;
2.上文中提到的CUDA_BUILD_CBUIN”、“CUDA_VERBOSE_BUILD(好像是這些),有些其實在Cmake配置和生成的過程中是找不到的,不過這并不影響結果,可以忽略;
3.關于tbb路徑下x86和x64版本lib的選擇問題:如果你的vs是32位的就選擇x86的庫,否則選x64的庫;
4.将編譯好的頭檔案、庫等加載到程式中時,注意要使用編譯的Release版本(形如:"opencv_gpu243.lib",243後沒有d的就是Release版本,有的就是Debug版本),否則會産生“應用程式無法正常啟動0xc000007b”的錯誤
測試代碼:
實際上,最後配置好了之後,還是各種問題,我覺的直接調用編譯好的opencv加上cuda的庫程式設計效率不是很好,通用性也存在問題。後來覺的引起這個問題的原因是自己電腦上安裝的東西太多了,opencv就裝了3個版本,環境變量設定的太多了,引起很多問題。
參考下面這個文章的第三種辦法,後面再試試:
<a target="_blank" href="http://www.cnblogs.com/dwdxdy/p/3528711.html">http://www.cnblogs.com/dwdxdy/p/3528711.html</a>