原來以為在Ubuntu下安裝好了OpenCV之後,自己寫個簡單的程式應該很容易吧,但是呢,就是為了編譯一個簡單的顯示圖片的程式我都快被弄崩潰了。
在Google和上StackOverFlow查看相關問題解答之後,我下面就介紹Command Line和CMake兩種方式。
首先我先粘上我測試的代碼吧,檔案名稱為Test.c
#include <highgui.h> int main(int argc,char ** argv) { IplImage* img = cvLoadImage(argv[1],CV_LOAD_IMAGE_COLOR); cvNamedWindow("Image_show",CV_WINDOW_AUTOSIZE); cvShowImage("Image_show",img); cvWaitKey(0); cvReleaseImage(&img); cvDestroyWindow("Image_show"); return 0; }
第一種方法:Command Line(使用命令列參數的方法)
gcc Test.c -o Test `pkg-config --cflags --libs opencv`./Test baboon.jpg
在這裡我稍微解釋下這條命令的作用吧。
在上面的編譯命令中我們其實用到了一個工具“pkg-config”,它主要有以下幾個功能: 檢查庫的版本號碼。如果所需要的庫的版本不滿足要求,它會列印出錯誤資訊,避免連結錯誤版本的庫檔案。 獲得編譯預先處理參數,如宏定義,標頭檔的位置。 獲得連結參數,如庫及依賴的其它庫的位置,檔案名稱及其它一些串連參數。 自動加入所依賴的其它庫的設定
所有有了這個工具之後我們的編譯就很方便了(不過在此之前你要確保你安裝的OpenCV的安裝連結庫檔案的目錄下有一個pkgconfig檔案夾,在該檔案夾裡面有個opencv.pc的檔案,其實這就是pkg-config下OpenCV的設定檔)。
使用pkg-config時,選項--cflags 它是用來指定程式在編譯時間所需要標頭檔所在的目錄,選項 --libs則是指定程式在連結時所需要的動態連結程式庫的目錄。例如我下面這張圖就顯示了我電腦上OpenCV的相關目錄。
第二種方法:使用OpenCV推薦的CMake工具
這個方法,我鬱悶了很久,試了各種辦法,最終還是編譯運行成功啦。一把心酸淚啊。
下面我就一步步介紹下步驟吧:
step1:建立一個目錄用於存放我們的代碼和程式中要處理的相關圖片
step2:添加cmake工具編譯時間所需的檔案CMakeLists.txt
CMakeLists.txt檔案中的具體內容如下(註:這個檔案你可以到你的OpenCV原始碼解壓出來的檔案夾下的/samples/c/example_cmake/檔案夾下拷過來,然後再做修改)。
下面我就簡要的介紹下這裡面內容的大概意思吧
PROJECT(OpenCV_Example) //這是建立一個工程項目(類似於我們VS中建立C++項目一樣),括弧裡面時工程名,工程名我們可以任意給,最後程式編譯出來的可執行檔就是這個名字CMAKE_MINIMUM_REQUIRED(VERSION 2.6) //這是對CMake工具最低版本要求,這裡我們要檢查下我們的CMake工具的版本資訊,我們可以使用命令“cmake --version”查看if(COMMAND cmake_policy) cmake_policy(SET CMP0003 NEW)endif(COMMAND cmake_policy) FIND_PACKAGE( OpenCV REQUIRED ) //這是cmake用來尋找opencv包用的,不用改# Declare the target (an executable)ADD_EXECUTABLE(OpenCV_Example Image_show.c) //這裡括弧裡面的兩個參數分別是工程項目名和我們要編譯檔案名稱的意思,記住中間一空格鍵隔開TARGET_LINK_LIBRARIES(OpenCV_Example ${OpenCV_LIBS}) //這是我們連結到OpenCV庫的環節,我們只要更改前面第一個參數位我們的工程項目名即可#MESSAGE(STATUS "OpenCV_LIBS: ${OpenCV_LIBS}") //好了,就修改這麼點東西,儲存,關閉。
然後我們就將終端的工作目錄切換到我們建立工程檔案的這個目錄
(注意,千萬要注意:你這時一定要查看你安裝OpenCV時建立的那個編譯檔案,有沒有帶鎖的標誌(即你編譯OpenCV是用root許可權編譯的),就這點就把我坑慘了,例如的我電腦上顯示的就是這樣的
看到上面圖片中的build檔案夾沒,那就是我編譯OpenCV原始碼時建立的檔案夾。)
所以,如果你是以root的許可權編譯的OpenCV此時你就要以切換到root使用者,再切換到當前的工作目錄。如果不是用root許可權編譯的OpenCV編譯的話,你就直接切換目錄就OK了。
我的電腦是要切換到root狀態的
Step3:讓後我們輸入命令"cmake ."對當前的工程進行編譯。啊哦,這時你就會發現你編譯時間出現了一個Bug
這個警告的大概意思就是:Cmake找不到OpenCV的連結庫檔案,你需要手動地設定OpenCV_DIR來指向包含庫檔案的路徑。
好吧,這是最蛋疼的地方,就這個問題我google和上StackOverFlow都沒有找到答案,只能自己嘗試了,不過還是找到網友給的一些提示。
其實通過它給我們的提示我們就是要設定好這個路徑。接下來我們通過camke的qt介面進行設定吧。
Step4:設定OpenCV_DIR
(1)先安裝cmake的qt介面 "sudo apt-get install cmake-gui"
(2)開啟cmake-gui介面
(3)我們這是就在Where is the source code 和 where to build binaries 的選項裡選擇我們的目錄剛才建立包含我們程式的檔案路徑吧。
(4)我們選擇cmake介面中的“Add Entry”選項,按照我下面圖中的方式輸入資訊吧,其中alue值就是我OpenCV安裝的那個目錄(回想下我上面說的)。
這樣我們就點擊ok吧,得到下面的圖了
到此OpenCV_DIR就配置完成了,單擊下面的Configure和Generate,如果沒報錯則一切搞定啦。我們可以愉快的回到終端編譯我們的程式啦。
(5)編譯的方式如圖所示
看到了嗎,綠色OpenCV_Example就是我們剛產生的可執行檔,到此大功告成啊。
Step5:運行測試吧
好了,搞定啦,睡覺啦!
轉載請註明出處:http://www.cnblogs.com/woshijpf/