首先說明的是,這個帖子是成功的編譯了dll,但是這個dll使用的時候還是很容易出現各種問題的。

發現錯誤可能是由於系統安裝了太多版本的opencv,環境變數的設置混亂,造成dll版本載入不對的問題。

更新:下面這篇文章裡面有加速編譯的設置辦法:但是編譯器採用了vs2012,我根據他的所有軟體版本換了編譯器,以及QT庫,需要特別注意的是,這些庫的相應操作系統版本32bit 或者64bit版本

QT早期版本下載地址:

下面這個網址能夠找到qt的各個版本

http://download.qt-project.org/archive/qt/

下面是教程地址:

http://www.xuebuyuan.com/2108717.html

2014.10.23

嚴格根據上文的軟體跟庫版本是可以編譯設置成功的。

Motivation:

之前在西電跟同學聽了圖像方面的講座,受益匪淺啊。人家學校的老師大多都是搞sar雷達圖像的,動輒20000*30000的高解析度。演算法再怎麼優化,一套流程下來至少算十天半個月。這改個參數算算等不起啊,最後發現搞這個不上GPU根本就不行,於是我想啊講GPU引入我的這個自然圖像處理跟,stereomatching,的graphcuts演算法中,應該也能夠得到性能的大幅度提升。

由於之前一直在看OpenCV這個圖像處理庫的相關內容,所以先搜了一下看看OpenCV這個庫有沒有直接對CUDA加速進行支持的,我打開電腦一看OpenCV的dll庫後面的後綴帶了_gpu就直接貼了代碼在那調試呢。結果是,小白了。自己要安裝CUDAtoolkit並且結合OpenCV編譯一遍的。

由於我的筆記本電腦是神舟的,顯卡是NVIDIAGTX765我也沒看,直接去官網下了個最新的CUDATOOLKIT6.5就開始整了,最後發現,人家有專門針對筆記本的notebook版本的,傻了一天白乾了,之後發現這個版本過高,還是下了notebook的5.5版本。

最新的6.5可能是給8系,9系的新卡用的吧,我也不是很清楚,最後搞完這一套配置終於明白為啥,linux之父最討厭nvidia了,這程序之間也是亂七八糟的關係兼容不兼容的,官網早期版本的sdk都找不到,哎。。。

使用Cmake的時候,有幾點要注意的,選擇VisualStudio2010的版本應該為win64這樣在win764bit版本下面生成的OpenCV才是正確的。

vs2010主要有兩種模式,分別是debug 和 release。 模式可以通過如圖所示的位置選擇。需要注意的是,因為先前我們cmake採用的是64位VS10編譯器,在這裡需要選擇編譯器x64, 而不是win32, 否則會出錯。

整體的過程參考了下面的鏈接:

http://www.xuebuyuan.com/722557.html

http://blog.csdn.net/fengbingchun/article/details/9831837

安裝完成後,在系統環境裡面會發現新添加了兩個環境變數:(環境變數挨個添加吧,不要怕麻煩)

CUDA_PATH =C:Program FilesNVIDIA GPU Computing ToolkitCUDAv5.0

CUDA_PATH_V5_0 =C:Program FilesNVIDIA GPU Computing ToolkitCUDAv5.0

手動配置環境變數。在系統環境變數中新建如下項:

CUDA_SDK_PATH = C:ProgramDataNVIDIA CorporationCUDA Samplesv5.0CUDA_LIB_PATH = %CUDA_PATH%libX64CUDA_BIN_PATH = %CUDA_PATH%inCUDA_SDK_LIB_PATH = %CUDA_SDK_PATH%commonlibx64CUDA_SDK_BIN_PATH = %CUDA_SDK_PATH%inwin64

然後在系統環境變數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: bb41_20130314oss

添加環境變數D: bb41_20130314ossinintel64vc10

編譯過程有兩點,可能出現:

1.配置的時候別忘了:添加兩個路徑,尤其是OpenCV的一個lib庫不然 編譯有的庫找不到,編譯不成功。

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

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

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

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

由於這樣直接生成的解決方案需對不同的GPU架構分別編譯,編譯時間過長(數小時),建議針對所用顯卡進行配置(據稱可達原時間六分之一):找到如下兩項

清空CUDA_ARCH_PTX,將CUDA_ARCH_BIN中僅保留所需GPU架構,確定所需架構,請查詢https://developer.nvidia.com/cuda-gpus重新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」的錯誤

測試代碼:

[cpp] view plaincopy

  1. <spanstyle="font-size:18px;">//first.cpp:定義控制台應用程序的入口點。
  2. //
  3. #include"stdafx.h"
  4. #include<iostream>
  5. #include"opencv2/opencv.hpp"
  6. #include"opencv2/gpu/gpu.hpp"
  7. #pragmacomment(lib,"opencv_gpu2410.lib")
  8. #pragmacomment(lib,"opencv_core2410.lib")
  9. usingnamespacestd;
  10. usingnamespacecv;
  11. usingnamespacecv::gpu;
  12. intmain()
  13. {
  14. inti;
  15. try
  16. {
  17. cout<<getCudaEnabledDeviceCount();
  18. }
  19. catch(constcv::Exception&ex)
  20. {
  21. cout<<"Error:"<<ex.what()<<endl;
  22. }
  23. system("PAUSE");
  24. return0;
  25. }
  26. </span>

實際上,最後配置好了之後,還是各種問題,我覺的直接調用編譯好的opencv加上cuda的庫編程效率不是很好,通用性也存在問題。後來覺的引起這個問題的原因是自己電腦上安裝的東西太多了,opencv就裝了3個版本,環境變數設置的太多了,引起很多問題。

參考下面這個文章的第三種辦法,後面再試試:

http://www.cnblogs.com/dwdxdy/p/3528711.html


推薦閱讀:
查看原文 >>
相关文章