1. 程式人生 > >在linux環境下編譯執行OpenCV程式的兩種方法

在linux環境下編譯執行OpenCV程式的兩種方法

  原來以為在Ubuntu下安裝好了OpenCV之後,自己寫個簡單的程式應該很容易吧,但是呢,就是為了編譯一個簡單的顯示圖片的程式我都快被弄崩潰了。

  在谷歌和上StackOverFlow檢視相關問題解答之後,我下面就介紹Command Line和CMake兩種方式。

  首先我先粘上我測試的程式碼吧,檔名為Test.c

按 Ctrl+C 複製程式碼

按 Ctrl+C 複製程式碼

  第一種方法:Command Line(使用命令列引數的方法)

gcc Test.c -o Test `pkg-config --cflags --libs opencv`
./Test baboon.jpg

  在這裡我稍微解釋下這條命令的作用吧。

  在上面的編譯命令中我們其實用到了一個工具“pkg-config”,它主要有以下幾個功能:

  1. 檢查庫的版本號。如果所需要的庫的版本不滿足要求,它會打印出錯誤資訊,避免連結錯誤版本的庫檔案。
  2. 獲得編譯預處理引數,如巨集定義,標頭檔案的位置。
  3. 獲得連結引數,如庫及依賴的其它庫的位置,檔名及其它一些連線引數。
  4. 自動加入所依賴的其它庫的設定

  所有有了這個工具之後我們的編譯就很方便了(不過在此之前你要確保你安裝的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/