我想,有二分之一的人安裝opencv是上網找份資料,然後按照他們列出的步驟邯鄲學步般地操作。我也有這麼一個時期,在那個時期,總以為編程才是最主要的工作,至於這些安裝系統、設定檔什麼的,都是我所鄙視的,我覺得編程才是王道,就像前蘇聯著重發展重工業,就像朝鮮的先軍政治。但是,安裝系統、設定檔這些看似瑣碎的活,都是你體現你電腦功底的地方,你要弄明白這些活中蘊涵的電腦知識。
說說VS安裝openCV吧,確切地說,是在VS上配置openCV。首先你會先下一個openCV的可執行檔,就是那個三色的“品”字,雖然這個檔案的尾碼名是.exe,但是你卻可以認為這是一個壓縮檔,你雙擊之後得到的將是一份原始碼,而不是安裝一個軟體。
好了,得到原始碼了,涉及到第一個問題,有的文檔讓你用CMake編譯這份原始碼,有的沒有,這其間的區別在哪裡?本質原因是openCV是開源項目,它允許你改變openCV的原始碼,所以既然有改動就一定涉及到編譯,再者,一些第三方的檔案,比如tbb如果想嵌入openCV使用,也是必須經過編譯這一過程的,所以會有需不需要編譯這碼事。有的版本的openCV會直接發布編譯好的版本,比如2.3版本之後,此時,你就直接在vs裡面配置即可,有的發布了原始碼,沒有dll檔案,這時你就要編譯了。
解決了一個問題,下面解決第二個問題,配置VS。配置VS時,一大坨什麼引入include目錄,庫目錄什麼的,有沒有一條線在裡面?捋一捋,我們編程的時候,總是要include一些標頭檔,這些標頭檔在哪裡?如果沒有IDE記錄,這些事情都是要我們自己做的,我們要告訴程式這些庫的路徑。一切都不是理所當然,但是對於VS這個IDE來說,天生嵌入一些執行階段程式庫的路徑是利索當然的,因為windows系統的一些庫函數的位置都是固定的,比如檔案夾c:/WINDOWS等,因此,當我們在程式中寫入這樣的語句“#include <stdio.h>”時,程式是不會報錯的,因為IDE在我們電腦上生根的那天起,它已經知道了stdio.h的路徑,同樣也知道相應的實實在在的庫函數可執行代碼的路徑。所以對於openCV這樣一個“外來戶”,並不是每一個電腦上都有,我們一定要讓IDE知道openCV中標頭檔的路徑,庫函數可執行檔的路徑,所以有了加入include目錄和lib目錄這樣兩個過程。
好了還剩下最後一個問題,就是真正一大坨的.lib的加入。一個可執行檔的產生總的來說分為兩個過程,一是編譯,一是連結,上文加入include為了編譯的過程, 那麼lib的出現就是為了連結的過程了,lib中是一些dll檔案集合,dll是動態連結檔案,說白了也是一些可執行檔,連結的過程,就是為了將你寫的代碼和這些庫檔案“結合”。在VS配置openCV過程中,你會有一個更新“附加依賴項”的過程,此時,你加入的這些**.lib就是連結時用到的庫檔案了,寫過Makefile的同仁是否對這個過程似曾相識呢?
好了,沒有疑惑了,這下我們可以毫無擔憂地使用openCV的庫了,就像標準C和標準C++的庫一樣。以後無論對編譯器添加什麼庫的路徑以及依賴關係,相信我們都能知其然,也知其所以然了。
最後附上我在VS2008上配置openCV 2.3.1時使用的一份文檔,配置成功。
http://wenku.baidu.com/view/f8cfcf086c85ec3a86c2c501.html