天天看點

win7 64位下自行編譯OpenCV2.4.10+CUDA toolkit 5.5的整個過程以及需要注意的問題(opencv+cuda并行計算元素的使用)

首先說明的是,這個文章是成功的編譯了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都找不到,哎。。。

win7 64位下自行編譯OpenCV2.4.10+CUDA toolkit 5.5的整個過程以及需要注意的問題(opencv+cuda并行計算元素的使用)

使用Cmake的時候,有幾點要注意的,選擇Visual Studio 2010的版本應該為win64這樣在win7 64bit版本下面生成的OpenCV才是正确的。

win7 64位下自行編譯OpenCV2.4.10+CUDA toolkit 5.5的整個過程以及需要注意的問題(opencv+cuda并行計算元素的使用)

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庫不然 編譯有的庫找不到,編譯不成功。

這個庫不需要設定!!!(後來發現!!!)

win7 64位下自行編譯OpenCV2.4.10+CUDA toolkit 5.5的整個過程以及需要注意的問題(opencv+cuda并行計算元素的使用)

2.整個編譯的過程非常的緩慢,并且出現在編譯OpenCV_gpu這個子產品的時候,出現c4819錯誤感覺非常影響速度,這個你要回到相應的cuda檔案中,另存為unicode格式就好

i7的處理器大概能編譯3個小時左右。。。

加速方法,可以縮短到一個小時左右!就是隻針對響應的顯示卡版本進行設定:

由于這樣直接生成的解決方案需對不同的GPU架構分别編譯,編譯時間過長(數小時),

建議針對所用顯示卡進行配置(據稱可達原時間六分之一):

找到如下兩項

win7 64位下自行編譯OpenCV2.4.10+CUDA toolkit 5.5的整個過程以及需要注意的問題(opencv+cuda并行計算元素的使用)

清空CUDA_ARCH_PTX,将CUDA_ARCH_BIN中僅保留所需GPU架構,

重新configure。(建議使用以上方法先編譯一邊,确定沒有錯誤,再為所有架構重新編譯,花了四天的時間得到的教訓)

win7 64位下自行編譯OpenCV2.4.10+CUDA toolkit 5.5的整個過程以及需要注意的問題(opencv+cuda并行計算元素的使用)

以上是轉載的内容,這裡要說幾個需要注意的地方:

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”的錯誤

測試代碼:

win7 64位下自行編譯OpenCV2.4.10+CUDA toolkit 5.5的整個過程以及需要注意的問題(opencv+cuda并行計算元素的使用)

實際上,最後配置好了之後,還是各種問題,我覺的直接調用編譯好的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>

繼續閱讀