找到一篇參考文章
Cuda Tech News: CUDA 5.5 + OpenCV 2.4.9 + Visual Studio 2012
──────────────────────────────────────────────────────
先前在2.4.6版試了很久都失敗,果斷心一橫下載2.4.7來編譯就過了。
然而2.4.7的highgui library不知是否有bug,導致無法將影片讀取進來。暫時的解決辦法是使用2.4.6的highgui library做代替。
安裝環境: (記得先查自己的NVIDIA顯示卡有沒有支援CUDA)
- Windows 7 64bit
- OpenCV 2.4.7
- CUDA 5.5
- Intel TBB 4.2
- CMake 2.8
一開始我是先調查如何在OpenCV使用CUDA,結果爬到這篇:
OpenCV學習筆記(四十四)——初探GPU
裡面提到了「使用GPU模塊,需要在用CMake編譯OpenCV時使其中的WITH_CUDA和WITH_TBB的宏生效,為ON。」,因此我再往如何由CMake重新編譯OpenCV的方向查找。
後來參考以下這兩篇,便開始了我的編譯之旅:
如何編譯OpenCV-2.3.x/OpenCV-2.4.x使其支持GPU-CUDA高速運算?
[Solved] Install OpenCV 2.4.6 using Visual Studio 2010 / 2012 in Windows 7 / 8 (FOR 64 bit machine only)
接著來記錄下我嘗試的編譯過程。
首先,使用CMake對於OpenCV進行重新編譯,如下圖。
source code: 選擇opencv所在之資料夾。
build the binaries: 自訂。
Generator for this project: 選擇自己安裝的Visual Studio版本,11 Win64表示2012 64位元。
然後再次Configure。
接著紅色部分可能為TBB_INCLUDE_DIRS,將值的路徑設置好,並再次Configure。
直到沒有紅色部分出現後便可Generate。
TBB_LIB_DIR和TBB_STDDEF_PATH也是一樣設置其所在路徑,再次Configure。
完成後打開opencv_cuda資料夾中的OpenCV.sln,並對其中的ALL_BUILD及INSTALL專案按右鍵→建置(Build)。
(記得把組態管理員設定Debug及Release各建置一次)

此時可能會發現一些問題:
警告: 檔案含有無法在目前字碼頁 (number) 中表示的字元。請以 Unicode 格式儲存檔案以防止資料遺失。
此處參考該篇文章來解決:
VC++ warning C4819 的解決方法
把那些發出警告的檔案以Unicode編碼存檔後再度建置一次...
大功告成!
p.s 編譯完的成果位在opencv_cuda\install資料夾內。
你好,我最近也在研究OPENCV與GPU,照您的步驟實作了一番,有一些問題請您指教
回覆刪除我用VC2012到最後完成編譯時,有太多太多的worming c4819來自於CUDA本來的程式碼,這些數以千計的程式碼真的都要打開來再用UNICODE儲存?另一方面,關於OPENCV的系統環境變數是要設定原始的來源目錄還是CMAKE編譯過後的OPENCV目錄?我看了一些文章是用來源目錄,那這樣CMAKE編譯不就沒意義了。因為我最後必須搭配PCL LIBRARY,所以更換為VC2010,依舊會有一些問題與VC2012相同。如果說我按照您的方式進行完畢後,要開始寫程式,我應該是開啟一個新專案後,將OPENCV.SLN的組態貼上,還是有其他的方式會更加容易工作?謝謝您的指教
你好,關於warning C4819的問題
刪除一份code裡通常會出現很多次warning
我編譯時出現warning的大約只有10來份code
因此我就直接把它們全打開來存成unicode了
從VS2012下面的錯誤清單找出這些檔案打開應該不難
過程是有點繁瑣沒錯。
至於OpenCV的系統環境變數
如果你確定你編譯過後的OpenCV library完全可以使用
那就可以考慮把它們放到一個固定的位置
然後在系統環境變數path裡加入這個路徑
那麼你之後開專案就只要添加include、lib目錄和其它相依性即可。
另一個方法則是把你編譯過後的opencv目錄丟到你的專案資料夾裡
然後在專案裡的那些屬性添加你編譯的opencv目錄的路徑和其它相依性等等
最後,與上面方法的差別是──
你還得把編譯後的opencv dll檔丟到你的程式所在的資料夾(如Debug)
如此才能正確運行。