在linux環境下編譯運行OpenCV程序的兩種方法

  原來覺得在Ubuntu下安裝好了OpenCV以後,本身寫個簡單的程序應該很容易吧,可是呢,就是爲了編譯一個簡單的顯示圖片的程序我都快被弄崩潰了。工具

  在谷歌和上StackOverFlow查看相關問題解答以後,我下面就介紹Command Line和CMake兩種方式。測試

  首先我先粘上我測試的代碼吧,文件名爲Test.cui

 1 #include <highgui.h>
 2 
 3 int main(int argc,char ** argv) {
 4 
 5     IplImage* img = cvLoadImage(argv[1],CV_LOAD_IMAGE_COLOR);
 6     cvNamedWindow("Image_show",CV_WINDOW_AUTOSIZE);
 7     cvShowImage("Image_show",img);
 8     cvWaitKey(0);
 9     cvReleaseImage(&img);
10     cvDestroyWindow("Image_show");
11     return 0;
12 }

 

  第一種方法:Command Line(使用命令行參數的方法)google

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

  在這裏我稍微解釋下這條命令的做用吧。spa

  在上面的編譯命令中咱們其實用到了一個工具「pkg-config」,它主要有如下幾個功能:命令行

  1. 檢查庫的版本號。若是所須要的庫的版本不知足要求,它會打印出錯誤信息,避免連接錯誤版本的庫文件。
  2. 得到編譯預處理參數,如宏定義,頭文件的位置。
  3. 得到連接參數,如庫及依賴的其它庫的位置,文件名及其它一些鏈接參數。
  4. 自動加入所依賴的其它庫的設置

  全部有了這個工具以後咱們的編譯就很方便了(不過在此以前你要確保你安裝的OpenCV的安裝連接庫文件的目錄下有一個pkgconfig文件夾,在該文件夾裏面有個opencv.pc的文件,其實這就是pkg-config下OpenCV的配置文件)。3d

  使用pkg-config時,選項--cflags 它是用來指定程序在編譯時所須要頭文件所在的目錄,選項 --libs則是指定程序在連接時所須要的動態連接庫的目錄。例如我下面這張圖就顯示了我電腦上OpenCV的相關目錄。code

  

  

  第二種方法:使用OpenCV推薦的CMake工具blog

  這個方法,我鬱悶了好久,試了各類辦法,最終仍是編譯運行成功啦。一把心酸淚啊。圖片

   下面我就一步步介紹下步驟吧:

  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/

相關文章
相關標籤/搜索