【OpenCV入門教程之七】 玩轉OpenCV源代碼:生成OpenCV工程解決方案與OpenCV源碼編譯

本系列文章由@淺墨_毛星雲 出品,轉載請註明出處。  

文章鏈接: http://blog.csdn.net/poem_qianmo/article/details/21974023

作者:毛星雲(淺墨)    郵箱: [email protected] 

寫作當前博文時配套使用的OpenCV版本: 2.4.8


 

 

這篇文章中,我們一起探討了如何通過已經安裝的OpenCV,選擇不同的編譯器類型,生成高度還原的OpenCV開發時的解決方案工程文件,欣賞OpenCV新版本中總計 六十六多萬行的精妙源代碼。我們可以對其源代碼進行再次編譯,得到二進制文件,或者修改原版官方的OpenCV代碼,並編譯後爲自己所用,爲深入理解OpenCV的開源魅力邁出了堅實的一步。

 

 



一、下載安裝cmake




想要在Windows平臺下生成OpenCV的解決方案,我們需要一個名爲cmake的開源軟件,可以在

camke的官網:http://www.cmake.org/上下載到,首先轉到其下載頁面。下載頁面的Source distributions處可以下載到cmake軟件的源碼,如果對這款開源軟件感興趣,不妨看看。

 

而Binary distributions處可以下載到cmake的執行文件,我們只需要下載到其執行文件即可,選擇Windows (Win32 Installer)進行下載,點擊這裏直接下載http://www.cmake.org/files/v2.8/cmake-2.8.12.2-win32-x86.exe

 



這一步就是下載和安裝cmake,下載地址給出了,安裝大家都會,就不過多講。安裝完成後,

如果沒有生成桌面快捷方式,在安裝路徑下,如D:\Program Files(x86)\CMake 2.8\bin處找到cmake-gui.exe運行


另外,關於cmake的一個簡介:

CMake,是“crossplatform make”的縮寫,它是一個跨平臺的安裝(編譯)工具,可以用簡單的語句來描述所有平臺的安裝(編譯過程)。他能夠輸出各種各樣的makefile或者project文件,能測試編譯器所支持的C++特性,類似UNIX下的automake。只是 CMake 的組態檔取名爲 CmakeLists.txt。Cmake 並不直接建構出最終的軟件,而是產生標準的建構檔(如 Unix 的 Makefile 或 Windows Visual C++ 的 projects/workspaces),然後再依一般的建構方式使用。這使得熟悉某個集成開發環境(IDE)的開發者可以用標準的方式建構他的軟件,這種可以使用各平臺的原生建構系統的能力是CMake 和 SCons 等其他類似系統的區別之處。

 


 

 

二、使用cmake生成OpenCV源代碼工程的解決方案




這一步是全文的核心內容。爲了講解條理清晰,我們分步介紹:


<1>運行cmake-gui


如果沒有生成桌面快捷方式,在安裝路徑下,如D:\Program Files(x86)\CMake 2.8\bin處找到cmake-gui.exe運行。

運行後得到如下的窗口:




<2>指定OpenCV的安裝路徑


如下圖,點擊紅色方框內的“Browse Source”按鈕,在彈出的對話框中指定出OpenCV安裝時源代碼的存儲路徑。

以當前最新版本的OpenCV 2.4.8安裝在D:\Program Files下爲例,則在此選擇路徑:D:\ProgramFiles\opencv\sources


其實我們可以發現,此路徑下必須會有一個名爲CMakeLists.txt的文件。

這個文件就是給cmake留下的配置文件,cmake可以根據這個配置文件,通過不同的編譯器選擇,來生成不同的解決方案,VisualStudio的編譯器對應的就生成Visual Studio版的sln解決方案。




<3>指定解決方案的存放路徑


如下圖,點擊紅色方框內的“Browse Build”按鈕,在彈出的對話框中指定我們存放生成的opencv解決方案的路徑。比如F:/opencv。

 

 

 

<4>第一次Configure


如圖,第一次點擊Configure按鈕。



會彈出如下進行編譯器選擇的對話框:


首先選定“Use default native compilers”,然後,我們可以發現下拉列表中提供了幾十種編譯器給我們選擇,因爲我們安裝了Visual Studio,會默認爲我們選擇好對應版本的Visual Studio編譯器,比如Visual Studio 10(即待會兒會生成對應VS2010的sln解決方案)

確認無誤後,單擊“finish”按鈕。

於是,cmake開始第一次源代碼配置過程:


在cmake處理的過程中,也許會出現諸如

“Could not copy from: D:/Program Files(x86)/CMake 2.8/share/cmake 2.8/Templates/CMakeVSMacros2.vsmacros

to: C:/Users/淺墨/Documents/VisualStudio 2010/Projects/VSMacros80/CMakeMacros/CMakeVSMacros2.vsmacros”

的紅色字樣警告,因爲這是系統用戶的路徑名有中文字符 “淺墨”照成的,因爲cmake不認中文路徑,但是隻要我們在上面的第三步中設置生成的路徑中沒有中文就行了。就算有這個因爲C:/Users/下有中文照成的錯誤,也對我們這次的生成無礙,不用去管他。

 

PS:關於系統用戶名爲中文,這是血的教訓。之前在玩Unity3D遊戲引擎的時候,被系統路徑爲中文虐了好一陣子,在unity官方商店下個插件就報錯。在控制面板中更改用戶名是治標不治本的辦法,最後把系統user的Documents目錄定位到別的地方纔解決。不過這會造成一些在Documents路徑下存了數據的軟件數據丟失,甚至打不開。。。。。所以,血的教訓。。。。淺墨在以後重裝系統的時候,絕對不會以中文ID作爲用戶名了。

 

看到進度條讀到盡頭,出現了Configuring done字樣,第一次的源碼配置就完成了,如圖





<5>第二次Configure



第一次配置完成之後,我們還需要進行第二次配置,於是再次點擊“Configure”按鈕。這次的配置是很快的,幾秒鐘就會再次出現“Configuring done”字樣,並且紅色的選中部分都正常了:


 



<6>點擊Generate,大功告成

 


這樣,就只剩下點一次Generate按鈕,來生成最終的解決方案了:

 


因爲之前已經有過兩次的configure過程,所以生成解決方案也將是非常的快:


 

看到Generating done字樣,就表示大功告成,可以去之前我們指定的F:\opencv下找尋我們生成的解決方案了。

 

 

PS:2.4.8的OpenCV用cmake生成的工程只有3點多M,相比之前2.4.6版本的OpenCV有3個多G的工程,淺墨一開始都以爲生成出錯了,但是點開sln工程,發現裏面依然可以看到源代碼。原來自從2.4.7版本起,opencv源代碼就直接包含在了opencv的安裝路徑下,我們生成的sln工程,也只是連接到了opencv安裝路徑下的源文件而已,工程本身並不大。

 

 

 

三、編譯OpenCV源代碼

 


我們懷着忐忑的心態打開剛剛生成的熱乎乎的“OpenCV.sln”解決方案,看到一個龐大的工程映入眼簾——這可是一個包含了67個項目的解決方案:

 

大家這個時候可以在解決方案資源管理界面,隨意地點進去一個自己感興趣的項目,比如opencv_core這個項目,在opencv_core/Src/matrix.cpp查看其中某個文件的源代碼,淺墨截的這張圖是大家都很熟悉的Mat類型的某個構造函數的源碼:


一陣對源代碼的欣賞之後,我們可以按【F5】或者使用其他各種操作來啓動調試



編譯過程:



編譯結果:



編譯用時5分鐘左右,具體時間和機器配置關係比較大。通過淺墨的截圖可以發現,這次編譯成功了62個項目,失敗了0,即沒有出簍子,全部編譯生成成功了。:D

另外,編譯完成會得到這樣的警告:


別緊張,這是正常的。因爲OpenCV2.4.8的源代碼工程默認將“ALL_BUILD”這個項目其設爲了啓動項,編譯成功後,就會默認運行它。


而“ALL_BUILD”是一個項目生成周邊的雜項,不是exe,本身不可以運行,所以就會彈出這樣的提示。

 

關於啓動項的指定,我們可以在解決方案資源管理器裏面,對需要設爲啓動項的那個項目反鍵點擊,在彈出的菜單項中點擊【設爲啓動項(J)】進行設定。如下圖:


其實我們編譯OpenCV,就是得到了一些二進制的生成文件,如DLL和Lib、exe。

因爲我們是在debug下編譯的,所以在工程目錄的bin\debug下會生成opencv 2.4.8的依賴庫(700多M,有點大),可以供我們以後調用opencv時使用。



 



四、OpenCV代碼行數統計



OpenCV到了2.4時代,源代碼src部分已經有了170多M,而源代碼行數,通過淺墨的統計,是68多萬行。(這裏淺墨不禁有些感慨,前兩天剛在搗鼓的Unreal Engine 4的源碼是144多萬行,是OpenCV的兩倍多。。。。)

 

可以看到,準確的OpenCV 2.4.8的源代碼,有687,870行。

OK,盛宴開始,計算機視覺領域的大寶庫——OpenCV的源碼近眼前,不虛此生地欣賞它吧。

========================================================================================================

上面爲Windows上配置,以下爲Ubuntu中OpenCV編譯及配置:

1. 安裝相關軟件包:

sudo apt-get install build-essential libgtk2.0-dev libavcodec-dev libavformat-dev libjpeg62-dev libtiff4-dev cmake libswscale-dev libjasper-dev

2. cmake:

新建文件夾release -> cd release -> cmake -D CMAKE_BUILD_TYPE=DEBUG <OpenCV_SourceCode_Path>

3. make & make install

4. 配置library:

打開/etc/ld.so.conf.d/opencv.conf,在末尾加入/usr/local/lib (有可能是個空文件,沒關係)

sudo ldconfig -> 編輯/etc/bash.bashrc -> 加入下面內容:
PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/lib/pkgconfig
export PKG_CONFIG_PATH
5. 安裝完成,測試下安裝成果:
將opencv源碼包下的example/c拷貝出來,執行./build_all.sh
編譯完後試一個人臉檢測的程序:
./facedetect --cascade="/usr/local/share/OpenCV/haarcascades/haarcascade_frontalface_alt.xml" --scale=1.5 lena.jpg


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章