標籤:
最近,由於需要從opencv源碼部分對opencv中的某個函數進行修改,以提升演算法的速度,因此一直在嘗試使用vs2012來編譯opencv。期間不乏多次的失敗。今天通過實驗發現了自己編譯的opencv庫終於可以使用了,不再出現之前出現的連結錯誤。現將編譯過程記錄如下,希望可以給需要的人提供思路和協助。如發現錯誤之處,也請留言指出,謝謝。
首先,來看看opencv的安裝目錄(如),可以發現有兩個子檔案夾。其中build檔案夾是已經編譯好的,可以直接使用的,而source檔案夾顧名思義就是opencv所有的的源碼了。但是該源碼並不是一個VS的工程檔案,因此沒法將整個整個源碼像開啟一個vs工程一樣將其開啟:
我們現在要做的第一步就是將source中的源碼“解包”(“解包”是什麼意思我現在也沒有弄清楚,在某篇部落格中看到的)成一個VS2012的項目。需要用到的工具是Cmake。
(1)下載並安裝好cmake,如所示。(我使用的是3.0版本)
(2)在cmake中選擇源碼路徑,並選擇將要產生的opencv工程的解決方案的路徑。
(3)路徑設定好之後,點擊Configure按鈕。出現如下情況。根據自己的vs版本選擇對應的即可。(我的是vs2012):
(4)點擊finish後cmake開始工作,結束後出現configure down字樣:
(5)再次點擊一次Configure,紅色部分消失,再次出現configure down:
(6)最後點擊Generate,出現Generating down,完成了opencv的解包:
(7)來看看目標路徑中都產生了什麼。這就是我們通過cmake想要得到的vs2012的解決方案。開啟Opencv.sln即可在vs2012中開啟opencv的整個項目(注意,當前產生的目錄中沒有bin和lib這兩個目錄):
通過上面一步一步詳細的介紹,我門現在終於可以飽覽opencv源碼真容了。我們開啟Opencv.sln,在vs2012中開啟opencv的項目:
可以看到,vs已經成功載入了opencv的整個項目。在解決方案上右鍵,並在快顯功能表中點擊產生解決方案,等待幾分中的時間:
待產生成功後,我們再來看看opencv項目目錄,可以看到目錄中多了兩個檔案夾lib和bin。這兩個目錄就是我們自己編譯的opencv的庫:
將bin和lib兩個檔案夾下的Debug目錄下的檔案全部拷貝到opencv的安裝目錄下,覆蓋掉原來的lib和dll檔案(這樣的話就不用重新設定環境了)
編寫一段測試程式(我在imshow源碼中增加了一個cout<<“this is a test”<<endl;語句):
#include<opencv2/opencv.hpp>#include <iostream>using namespace std;using namespace cv;int main() { int i; Mat img = imread("test.jpg"); if (img.empty()) { fprintf(stderr,"Error:load image failed."); system("pause"); return -1; } namedWindow("image",CV_WINDOW_AUTOSIZE); imshow("image",img); waitKey(); system("pause"); return 0; }
運行後結果如下,可以看到,控制台中輸出了this is a test!:
至此,整個opencv的編譯過程到此結束。希望可以給大家協助!
參考部落格:
http://www.tuicool.com/articles/f6ZBZv
原創博文,轉載請註明出處:http://www.cnblogs.com/xiongmao-cpp/
使用visual studio 2012 編譯opencv2.4.9