原來(lái)以為在Ubuntu下安裝好了OpenCV之后,自己寫個(gè)簡(jiǎn)單的程序應(yīng)該很容易吧,但是呢,就是為了編譯一個(gè)簡(jiǎn)單的顯示圖片的程序我都快被弄崩潰了。
在谷歌和上StackOverFlow查看相關(guān)問(wèn)題解答之后,我下面就介紹Command Line和CMake兩種方式。
首先我先粘上我測(cè)試的代碼吧,文件名為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(使用命令行參數(shù)的方法)
gcc Test.c -o Test `pkg-config --cflags --libs opencv`
./Test baboon.jpg
在這里我稍微解釋下這條命令的作用吧。
在上面的編譯命令中我們其實(shí)用到了一個(gè)工具“pkg-config”,它主要有以下幾個(gè)功能:
- 檢查庫(kù)的版本號(hào)。如果所需要的庫(kù)的版本不滿足要求,它會(huì)打印出錯(cuò)誤信息,避免鏈接錯(cuò)誤版本的庫(kù)文件。
- 獲得編譯預(yù)處理參數(shù),如宏定義,頭文件的位置。
- 獲得鏈接參數(shù),如庫(kù)及依賴的其它庫(kù)的位置,文件名及其它一些連接參數(shù)。
- 自動(dòng)加入所依賴的其它庫(kù)的設(shè)置
所有有了這個(gè)工具之后我們的編譯就很方便了(不過(guò)在此之前你要確保你安裝的OpenCV的安裝鏈接庫(kù)文件的目錄下有一個(gè)pkgconfig文件夾,在該文件夾里面有個(gè)opencv.pc的文件,其實(shí)這就是pkg-config下OpenCV的配置文件)。
使用pkg-config時(shí),選項(xiàng)--cflags 它是用來(lái)指定程序在編譯時(shí)所需要頭文件所在的目錄,選項(xiàng) --libs則是指定程序在鏈接時(shí)所需要的動(dòng)態(tài)鏈接庫(kù)的目錄。例如我下面這張圖就顯示了我電腦上OpenCV的相關(guān)目錄。
第二種方法:使用OpenCV推薦的CMake工具
這個(gè)方法,我郁悶了很久,試了各種辦法,最終還是編譯運(yùn)行成功啦。一把心酸淚啊。
? 下面我就一步步介紹下步驟吧:
step1:新建一個(gè)目錄用于存放我們的代碼和程序中要處理的相關(guān)圖片
step2:添加cmake工具編譯時(shí)所需的文件CMakeLists.txt
CMakeLists.txt文件中的具體內(nèi)容如下(注:這個(gè)文件你可以到你的OpenCV源代碼解壓出來(lái)的文件夾下的/samples/c/example_cmake/文件夾下拷過(guò)來(lái),然后再做修改)。
下面我就簡(jiǎn)要的介紹下這里面內(nèi)容的大概意思吧
PROJECT(OpenCV_Example) //這是建立一個(gè)工程項(xiàng)目(類似于我們VS中建立C++項(xiàng)目一樣),括號(hào)里面時(shí)工程名,工程名我們可以任意給,最后程序編譯出來(lái)的可執(zhí)行文件就是這個(gè)名字
CMAKE_MINIMUM_REQUIRED(VERSION 2.6) //這是對(duì)CMake工具最低版本要求,這里我們要檢查下我們的CMake工具的版本信息,我們可以使用命令“cmake --version”查看
if(COMMAND cmake_policy)
cmake_policy(SET CMP0003 NEW)
endif(COMMAND cmake_policy)
FIND_PACKAGE( OpenCV REQUIRED ) //這是cmake用來(lái)查找opencv包用的,不用改
# Declare the target (an executable)
ADD_EXECUTABLE(OpenCV_Example Image_show.c) //這里括號(hào)里面的兩個(gè)參數(shù)分別是工程項(xiàng)目名和我們要編譯文件名的意思,記住中間一空格鍵隔開(kāi)
TARGET_LINK_LIBRARIES(OpenCV_Example ${OpenCV_LIBS}) //這是我們鏈接到OpenCV庫(kù)的環(huán)節(jié),我們只要更改前面第一個(gè)參數(shù)位我們的工程項(xiàng)目名即可
#MESSAGE(STATUS "OpenCV_LIBS: ${OpenCV_LIBS}") //好了,就修改這么點(diǎn)東西,保存,關(guān)閉。
然后我們就將終端的工作目錄切換到我們建立工程文件的這個(gè)目錄
(注意,千萬(wàn)要注意:你這時(shí)一定要查看你安裝OpenCV時(shí)建立的那個(gè)編譯文件,有沒(méi)有帶鎖的標(biāo)志(即你編譯OpenCV是用root權(quán)限編譯的),就這點(diǎn)就把我坑慘了,例如的我電腦上顯示的就是這樣的
看到上面圖片中的build文件夾沒(méi),那就是我編譯OpenCV源代碼時(shí)建立的文件夾。)
所以,如果你是以root的權(quán)限編譯的OpenCV此時(shí)你就要以切換到root用戶,再切換到當(dāng)前的工作目錄。如果不是用root權(quán)限編譯的OpenCV編譯的話,你就直接切換目錄就OK了。
我的電腦是要切換到root狀態(tài)的
Step3:讓后我們輸入命令"cmake ."對(duì)當(dāng)前的工程進(jìn)行編譯。啊哦,這時(shí)你就會(huì)發(fā)現(xiàn)你編譯時(shí)出現(xiàn)了一個(gè)Bug
這個(gè)警告的大概意思就是:Cmake找不到OpenCV的鏈接庫(kù)文件,你需要手動(dòng)地設(shè)置OpenCV_DIR來(lái)指向包含庫(kù)文件的路徑。
好吧,這是最蛋疼的地方,就這個(gè)問(wèn)題我google和上StackOverFlow都沒(méi)有找到答案,只能自己嘗試了,不過(guò)還是找到網(wǎng)友給的一些提示。
其實(shí)通過(guò)它給我們的提示我們就是要設(shè)置好這個(gè)路徑。接下來(lái)我們通過(guò)camke的qt界面進(jìn)行設(shè)置吧。
文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-563803.html
Step4:設(shè)置OpenCV_DIR
(1)先安裝cmake的qt界面 "sudo apt-get install cmake-gui"
?。?)打開(kāi)cmake-gui界面
?。?)我們這是就在Where is the source code 和 where to build binaries 的選項(xiàng)里選擇我們的目錄剛才建立包含我們程序的文件路徑吧。
(4)我們選擇cmake界面中的“Add Entry”選項(xiàng),按照我下面圖中的方式輸入信息吧,其中alue值就是我OpenCV安裝的那個(gè)目錄(回想下我上面說(shuō)的)。
這樣我們就點(diǎn)擊ok吧,得到下面的圖了
到此OpenCV_DIR就配置完成了,單擊下面的Configure和Generate,如果沒(méi)報(bào)錯(cuò)則一切搞定啦。我們可以愉快的回到終端編譯我們的程序啦。
?。?)編譯的方式如圖所示
看到了嗎,綠色OpenCV_Example就是我們剛生成的可執(zhí)行文件,到此大功告成啊。
Step5:運(yùn)行測(cè)試吧
文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-563803.html
到了這里,關(guān)于在linux環(huán)境下編譯運(yùn)行OpenCV程序的兩種方法的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!