VS2010平台下的OpenCV、EmguCV( C#)安裝、使用配置


OS:Win7旗艦版64位

平台:VS2010旗艦版 x86

安裝包版本:OpenCV2.4.2 x86 下載地址:http://sourceforge.net/projects/opencvlibrary/files/opencv-win/2.4.2/OpenCV-2.4.2.exe/download

      EmguCV2.4.2 x86 下載地址:http://sourceforge.net/projects/emgucv/files/emgucv/2.4.2/libemgucv-windows-x86-gpu-2.4.2.1773.exe/download (GPU版本)

OpenCV:

1. 解壓

為了便於管理,我在D盤根目錄下新建了CV文件夾,然后解壓至下面。

2. 設置系統變量

實際上我是在"用戶變量"處,新建了PATH項,內容:

;D:\CV\OpenCV2.4.2\build\x86\vc10\bin;

網上有說還需要新建OPENCV項,內容為D:\CV\OpenCV2.4.2\build,我沒有加進去,也配通了。暫時沒有發現其作用。 留意下面包含tbb

————————下面是每個項目的配置————————

3. 建立一個demo

在C++下,新建一個“win32控制台程序”,“空項目”即可,輸入以下代碼:

#include "highgui.h"

int main()
{
const char* imagename = "D:/Demo.jpg";//隨便放一張jpg圖片在D盤或另行設置目錄
cv::Mat img = cv::imread(imagename);

if(img.empty()) return -1;//是否加載成功
if(!img.data) return -1;

cv::namedWindow("image", CV_WINDOW_AUTOSIZE);
cv::imshow("image", img);
cv::waitKey();
return 0;
}

  

4. 配置
(1)、在“視圖”中打開“屬性管理器”;
(2)、在“屬性管理器”中雙擊Demo的項目名稱;
(3)、在“Demo屬性頁”->“VC++目錄”->“包含目錄”中添加下面一行(包括所有分號):
;D:\CV\OpenCV2.4.2\build\include;D:\CV\OpenCV2.4.2\build\include\opencv;D:\CV\OpenCV2.4.2\build\include\opencv2;


(4)、在“Demo屬性頁”->“VC++目錄”->“庫目錄”中添加下面一行(包括所有分號):
;D:\CV\OpenCV2.4.2\build\x86\vc10\lib;

(5)、在“Demo屬性頁”(“配置”==“Debug”)->“配置屬性”->“鏈接器”->“輸入”->“附加依賴庫”中添加下面一行(包括所有分號):
;opencv_core242d.lib;opencv_highgui242d.lib;opencv_video242d.lib;opencv_ml242d.lib;opencv_legacy242d.lib;opencv_imgproc242d.lib;

(6)、在“Demo屬性頁”(“配置”==“Release”)->“配置屬性”->“鏈接器”->“輸入”->“附加依賴庫”中添加下面一行(包括所有分號):
;opencv_core242.lib;opencv_highgui242.lib;opencv_video242.lib;opencv_ml242.lib;opencv_legacy242.lib;opencv_imgproc242.lib;

至此配置基本完畢,我運行的時候發現報錯:丟失tbb_debug.dll。安裝TBB,配置用戶變量,問題解決。

軟件包名稱:tbb40_20120613oss_win.zip (Intel TBB)

下載地址:

http://threadingbuildingblocks.org/uploads/77/187/4.0%20update%205/tbb40_20120613oss_win.zip

用戶變量PATH添加:D:\CV\tbb40_20120613oss\bin\ia32\vc10;

至此,OpenCV2.4.2配置完成,程序順利運行。

 

EmguCV:

過程類似。我安裝在D:\CV下面,以便統一管理。

用戶變量PATH添加:D:\CV\Emgu\emgucv-windows-x86-gpu 2.4.2.1773\bin; (注意gpu版本,區別於普通版)

調試運行時候,記得添加dll文件的引用。

有人說需要導入UI插件,我沒有導入但還是跑通了(主要是繪制界面時候,提供一些特殊的控件)。順便記下以便備用:

點擊“工具(T)” -> “選擇工具箱項(X)…” ,在新打開的窗口中選擇:“.NET Framework組件”,點擊“瀏覽”,到目錄:C:\Emgu\emgucv-windows-x86 2.3.0.1416\bin下,雙擊 Emgu.CV.UI.dll即可
 
問題&總結:
1,出現 Emgu.CV.CvIvoke錯誤,或者顯示找不到opencv_core242.dll模塊:
 
出錯目前有兩種情況:
一是沒有裝OpenCV,或是是配置的不成功。我試了下,沒有OpenCV,會出現Emgu.CV.CvIvoke錯誤,或者顯示找不到opencv_core242.dll模塊。可能EmguCV需要依賴OpenCV。網上有說可以獨立存在,可以拷貝DLL文件到exe的當前目錄。我試了,發現不行。
二是OpenCV和EmguCV的版本不一致。我之前裝了OpenCV2.3.1和EmguCV2.4.2,折騰了一天,包括嘗試x64位安裝包、復制dl、修改系統變量、修改文件夾名(無空格全英文)等辦法,均報上述錯誤。后來統一了版本2.4.2,輕松跑通。
 
修正:
EmguCV可以獨立存在,無需安裝OpenCV;
EmguCV對版本比較敏感,目前發現如果是基於2.2開發的程序,在2.4包下就很可能出現CVIvoke錯誤(一些函數在不同版本中變化較大),保證版本一致即可;或者手動修改相應代碼,采用對應版本的編寫方式。
 
第二次修正:
EmguCV分兩種安裝包,gpu版本的,和普通版的。gpu版本目前測試,需要機器支持NVIDIA獨立顯卡,Intel集成顯卡的機器上運行會出現CvInvoke錯誤,更換為普通版即可;至於GPU版如何在集顯的電腦上面跑通,目前尚不清楚,嘗試過復制所有的DLL文件(包括顯卡的),均以失敗告終。
 
第三次修正:
我的機器(64位)上安裝x86-gpu版本的EmguCV,運行例子,會報錯CvInvoke,跟蹤調試說找不到opencvcore_xxx.dll文件。
原因分析:導致該問題的原因很多,一個比較隱晦的原因,是你的機子是集成顯卡,而你用的GPU版安裝包需要nvcuda.dll動態庫。
解決辦法:找一個安裝了NVDIA顯卡驅動的機子,如果是64位機器,拷貝其nvcuda32.dll至當前目錄,改名為nvcuda.dll即可(這個比較難發現);如果是32位,直接拷貝nvcuda.dll即可。(A卡獨顯尚未測試)
 
至此,我在EmguCV和OpenCV安裝配置中遇到的所有問題,均已解決。
 
如果安裝后在調試程序出現錯誤,並且懷疑可能是路徑配置或者DLL文件問題時,推薦用ProcessMonitor軟件跟蹤你的程序,尤其是跟蹤下運行時調用DLL文件的情況。留心那些fail的調用。
 
2,修改系統變量不會立即生效,有人推薦重啟explorer.exe,不推薦,測試發現偶爾會失效,還會容易讓你誤以為修改過了。推薦注銷操作,又快又穩妥。
 
3,部分版本EmguCV需要.net 3.5,這個win7自帶的。沒有的系統,需要安裝下。
 
4,vcredist_x86也是需要的,不然會出錯。好在現在EmguCV的安裝包自帶了。
 
5,留意雖然是x64位的win7系統,但是VS2010、OpenCV、EmguCV均是x86的,依然可以正常配通,不需要x64位的包(有空測試下x64位的安裝包)。只是在VS2010里面,CPU要選擇x86的。
 
暫時就這些,想到了再來補充。
 
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM