這個問題糾結了很久,其實是個很簡單的問題,但是在連結OpenCV靜態庫的時候出現了一點小錯誤,所以一直沒有成功在其它機器上正常運行。現在解決了,所以記錄下來,讓一些剛入門的兄弟能夠不重蹈覆轍。為了講述方便,先介紹一下運行環境:OpenCV2.0+vs2005,OpenCV2.0的安裝路徑為c:\opencv2.0。
成功編譯運行基於OpenCV庫的應用程式所需要的vs2005設定:
一、引用靜態連結庫
有兩種方法:
1.在vs2005的"項目"-"(項目名)屬性"-"配置屬性"-"連結器"-"輸入"-"附加依賴庫"中根據release(或debug)配置屬性添加相應的靜態連結庫,release狀態就添加cv200.lib,cxcore200.lib,highgui200.lib,debug狀態就添加cv200d.lib,cxcore200d.lib,highgui200d.lib。
2.不用再附加依賴庫中添加靜態庫,只需要在代碼檔案中(如:stdafx.h)中添加
//剛開始設定成了#ifdef DEBUG_NEW,所以就一直沒有成功在其它機器上運行。比如產生release版本的時候在其他機子運行總是提示缺少debug版本的動態連結程式庫(如cv200d.dll等),但是放入debug版本的動態連結程式庫也是無法運行,估計是系統混亂了。<br />#ifdef _DEBUG<br />#pragma comment(lib,"cxcore200d.lib")<br />#pragma comment(lib,"cv200d.lib")<br />#pragma comment(lib,"highgui200d.lib")<br />#else<br />#pragma comment(lib,"cxcore200.lib")<br />#pragma comment(lib,"cv200.lib")<br />#pragma comment(lib,"highgui200.lib")<br />#endif
二、設定動態連結程式庫的引用路徑
在我的電腦上,動態連結程式庫或者靜態連結庫只需引用其中一個就行,所以這個引用路徑不需配置也可以。不過也有人不設定這個路徑就會無法正確配置並運行應用程式,所以最好在ide中設定好動態連結程式庫的引用路徑。也有兩種方法:
1.在"工具"-"選項"-"項目和解決方案"-"VC++目錄"中在右上方的"顯示一下內容的目錄"組合框中選擇"可執行檔",在這裡依次添加兩行,並選擇OpenCV2.0的動態連結程式庫的位置如:c:\opencv2.0\bin\release和c:\opencv2.0\bin\debug
2.在電腦的系統內容變數中的"Path"這個變數添加OpenCV2.0的動態連結程式庫的位置,如:c:\opencv2.0\bin\release;c:\opencv2.0\bin\debug
三、設定OpenCV庫標頭檔的包含路徑
在"工具"-"選項"-"項目和解決方案"-"VC++目錄"中在右上方的"顯示一下內容的目錄"組合框中選擇"包含檔案",在這裡依次添加兩行,並選擇OpenCV2.0的標頭檔的位置如:c:\opencv2.0\include\opencv
到此就可以成功編譯和運行基於OpenCV的應用程式了。
要想在其它機子上運行自己的臉部偵測系統,得把haarcascade_frontalface_alt.xml放到應用程式的所在目錄,並且在代碼中修改載入分類器的路徑,可以用GetModuleFileName方法獲得路徑,然後重新編譯一遍代碼,再把動態連結程式庫的檔案cv200.dll,cxcore200.dll,highgui200.dll拷貝到應用程式的目錄下面,如果對方機子沒有裝Visual c++ 2005 redistribute,則必須為對方安裝Visual c++ 2005 分發包或者將MFC動態庫(C:\Program Files\Microsoft Visual Studio 8\VC\redist\x86路徑下的Microsoft.VC80.MFC和Microsoft.VC80.CRT目錄中的動態連結程式庫)全部拷貝到應用程式所在目錄。至此把這些檔案所在的檔案夾拷到對方機子上就能夠正常運行了。