Linux系統下的OpenCV編譯以及OpenCV的Qt上的使用


背景:

Ubuntu 15.04

Qt 5.2.1

OpenCV 3.0.0

資料全部來源於網絡,我只是資料的搬運工。

首先,我們應該安裝幾個必要的東西

sudo apt-get install build-essential cmake libgtk2.0-dev pkg-config python-dev python-numpy libavcodec-dev libavformat-dev libswscale-dev

 這里,我感覺有一些python相關的,不用安裝(我這里使用的是c++)。我沒有進行驗證。

其次 GCC還是要裝一下的,雖然Ubuntu系統會自帶,但是還是提一句吧:

sudo apt-get install gcc

 去OpenCV官方網站下載Linux版本的OpenCV,這里我要提一句,不同的OpenCV的編譯方式,大致相同,但是仍然有一定的差異,這要注意。

下載好了,就可以將壓縮文件進行解壓,我這里一般解壓到/home/x文件夾下,x是用戶名。

解壓好了,進入/home/x/opencv-3.0.0

這里的網上的教程提供了一種方法,進行編譯。在opencv-3.0.0中創建一個叫做release的文件夾(名字無所謂的)

這里我們需要cmake這個東西,使用它可以進行編譯,cmake在前面的命令中已經安裝好了,我們不用操心了。

這里需要這樣的一個命令,cmake編譯OpenCV源碼,所有的lib文件都會被安裝到/usr/local目錄下

cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local

這個地方其實要花費很長時間的,其中有可能會存在錯誤,我這里一直很順,我也不能給出具體措施,抱歉。

安裝

make

sudo make install

環境變量pkg_config_path 提供編譯時和運行時庫的路徑查詢。pkg-config 是通過庫提供的一個 .pc 文件獲得庫的各種必要信息的,包括版本信息、編譯和鏈接需要的參數等。這些信息可以通過 pkg-config 提供的參數單獨提取出來直接供編譯器和 鏈接器使用。使用 pkg-config 的 --cflags 參數可以給出在編譯時所需要的選項,而 --libs 參數可以給出 鏈接時的選項。

在上述opencv 的安裝結束后,pkg-config 的讀取目錄 /usr/local/lib/pkgconfig/ 下已經有opencv.pc。

上面這段是引用的,當然,這里還需要一個步驟,修改系統環境變量

編輯環境變量

hugo@hugo-ThinkPad-Edge:~/Downloads/OpenCV-2.4.1/build$ sudo vim /etc/ld.so.conf.d/opencv.conf

添加opencv庫所在路徑:

/usr/local/lib
hugo@hugo-ThinkPad-Edge:~/Downloads/OpenCV-2.4.1/build$ sudo ldconfig
hugo@hugo-ThinkPad-Edge:~/Downloads/OpenCV-2.4.1/build$ sudo vim /etc/bash.bashrc 

在末尾添加:

PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/lib/pkgconfig
export PKG_CONFIG_PATH


上面的依舊是引用部分,到這里,如果沒有錯誤,基本上就沒什么問題了。不要掉以輕心,還要有一些東西需要做一下。
當我們使用g++進行編譯的時候,需要注意這么幾點

 

g++ `pkg-config opencv --cflags --libs opencv` -o test  test.cpp -I /usr/local/include/opencv -L /usr/local/lib -lopencv_core -lopencv_highgui -lopencv_imgproc -lopencv_objdetect  -lopencv_imgcodecs

 

上面的編譯命令,也是來自引用 ,注意兩點:

1,'pkg-config opencv --cflags --libs opencv'這個東西,要有的,沒有的話,編譯不成功。

環境變量pkg_config_path 提供編譯時和運行時庫的路徑查詢。pkg-config 是通過庫提供的一個 .pc 文件獲得庫的各種必要信息的,包括版本信息、編譯和鏈接需要的參數等。這些信息可以通過 pkg-config 提供的參數單獨提取出來直接供編譯器和 鏈接器使用。使用 pkg-config 的 --cflags 參數可以給出在編譯時所需要的選項,而 --libs 參數可以給出 鏈接時的選項。

2,要有很多鏈接文件,否則就匯出問題,鏈接文件位於/usr/local/lib中,OpenCV3.0.0中需要注意的地方是opencv_imgcodecs這個鏈接文件,在其他版本的OpenCV中沒有需要,這里我們一定要將它放進來,要不然會有問題。

 

 

第二部分,Qt的配置

我們如果按照上面的內容進行配置,應該問題不算大的。

Qt的配置,主要在項目文件中添加如下

INCLUDEPATH+=/usr/local/include\
/usr/local/include/opencv\
/usr/local/include/opencv2
LIBS+=/usr/local/lib/libopencv_highgui.so\
/usr/local/lib/libopencv_core.so\
/usr/local/lib/libopencv_imgproc.so\
/usr/local/lib/libopencv_imgcodecs.so
我們可以看到,上面的這些,和shell中使用g++編譯的鏈接庫什么的很相似。尤其是/usr/local/lib/libopencv_imgcodecs.so着一條別忘了。


 

引用資料如下,萬分感謝!!!

http://blog.163.com/huai_jing@126/blog/static/171861983201311103411229/

http://www.douban.com/note/433807086/

http://www.2cto.com/os/201404/291798.html

http://blog.csdn.net/WL2002200/article/details/45741635

http://www.cnblogs.com/tornadomeet/archive/2012/07/10/2584702.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM