歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> Linux教程 >> OpenCV2.4.5在Ubuntu 13.04下配置過程

OpenCV2.4.5在Ubuntu 13.04下配置過程

日期:2017/2/28 14:47:21   编辑:Linux教程

OpenCV 2.4.5編譯安裝方法

需要x264,ffmpeg和opencv2.4.5

x264下載地址:ftp://ftp.videolan.org/pub/x264/snapshots/
ffmpeg下載地址:http://www.ffmpeg.org/download.html
opencv下載地址:http://opencv.org/

我們使用最新的Ubuntu 13.04操作系統,所以采用比較高版本的ffmpeg等。x264采用20130503版本,ffmpeg采用1.2.1版本,opencv采用2.4.5版本。

ffmpeg對我們至關重要,ffmpeg用來邊解碼圖像,讀取輸入輸出AVI視頻並顯示,是我們的圖形界面。x264作為一個補充,大家都安,所以我們也安裝上把。OpenCV2.4.5有很多新的功能,最新的就是對顯卡的進一步支持,這些我們都用不到,而且配置也更麻煩,所以我選擇直接忽略掉,比如ocl模塊沒有編譯,比如cvconfig.h頭文件找不到,這些問題暫時不影響我們編譯運行opencv程序,尤其是對我們的應用。不過對光流法而言,我發現示例代碼中有三個文件夾,c,cpp和gpu,三個文件夾都包含光流法optical flow的demo,可見光流法很有研究意義。尤其是gpu文件夾裡有,這可能有一些gpu上的好東西,有機會的話可以看看。

開始准備,因為是ubuntu,裝軟件比較方便,使用apt-get,把能裝的都裝上
sudo apt-get -y install autoconf automake build-essential git libass-dev libfaac-dev libgpac-dev \
libmp3lame-dev libopus-dev libsdl1.2-dev libtheora-dev libtool libva-dev libvdpau-dev \
libvorbis-dev libvpx-dev libx11-dev libxext-dev libxfixes-dev pkg-config texi2html yasm zlib1g-dev

下載好三個文件後,新建文件夾,名字自取,我取build_sources。
首先編譯x264,
tar xvf x264-snapshot-20130503-2245-stable.tar.bz2
cd x264-snapshot-20130503-2245-stable
./configure --enable-shared --enable-static
make
sudo make install

注:x264由ffmpeg靜態調用,所以我們把編譯好的文件放在系統庫區就行,所以可以不make install,采用cp libx264.a /usr/lib \ cp x264.h /usr/include
參考鏈接: http://www.linuxidc.com/Linux/2007-11/8826.htm

然後編譯ffmpeg
參考鏈接為http://www.samontab.com/web/2011/06/installing-opencv-2-2-in-ubuntu-11-04/和http://www.samontab.com/web/2012/06/installing-opencv-2-4-1-ubuntu-12-04-lts/

ffmpeg采用11-04這個帖子裡的做法。
tar xvf ffmpeg-1.2.1.tar.bz2
cd ffmpeg-1.2.1
./configure --enable-gpl --enable-version3 --enable-nonfree --enable-postproc --enable-libfaac --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libtheora --enable-libvorbis --enable-libxvid --enable-x11grab --enable-swscale --enable-shared
make
sudo make install

在./configure的參數種,--enable選項沒有指定安裝路徑的話,一般都會安裝在/usr/local,這裡可以參看同目錄下config.mak。由於ffmpeg將編譯出很多庫,尤其是libavformat.so,libavcodec.so, libavutil.so,libavfilter.so等,make install操作將把它們復制在/usr/local目錄下,這些庫將用於鏈接,所以ldconfig操作是必須的。
vim /etc/ld.so.conf,可以看到鏈接選項都在ld.so.conf.d/文件夾下。我們看到,在ld.so.conf.d文件夾下有文件:libc.conf
vim /etc/ld.so.conf.d/libc.conf
#libc default configuration
/usr/local/lib
可見已經被包括進去了,我們只需要在任意位置執行sudo ldconfig命令即可鏈接。

為檢驗ffmpeg是否安裝成功,可以運行ffmpeg安裝目錄下的例子。
cd /usr/local/share/ffmpeg/examples/
sudo make
有一個例子是demuxing,是分離一個視頻的影與音的,找一個標准格式的avi圖像,我采用光流法的輸入圖像,optical_flow_input.avi
sudo ./demuxing optical_flow_input.avi video.avi audio
第一個參數是輸入的avi視頻,第二個參數是輸出的脫離聲音的音頻,第三個是脫離的音頻。
執行完畢後會打印輸出
Demuxing succeeded.
Play the output video file with the command:
ffplay -f rawvideo -pix_fmt rgb24 -video_size 720x480 video.avi
我們可以執行最後一句輸出ffplay -f rawvideo -pix_fmt rgb24 -video_size 720x480 video.avi 看到圖像
這樣就說明ffmpeg安裝成功

最後是編譯openCV
編譯opencv要使用cmake,所以ubuntu要首先安裝
sudo apt-get install cmake
tar xvf opencv-2.4.5.tar.gz
cd opencv-2.4.5
mkdir build
cd build
cmake -D WITH_TBB=ON -D BUILD_NEW_PYTHON_SUPPORT=ON -D WITH_V4L=ON -D INSTALL_C_EXAMPLES=ON -D INSTALL_PYTHON_EXAMPLES=ON -D BUILD_EXAMPLES=ON -D WITH_QT=ON -D WITH_OPENGL=ON ..

注意mkdir build是必須的,cmake決定的
cmake的參數中還是有些比較重要的東西的,v4l是linux下可以用來通過攝像頭采集圖像的庫,其他的可以有可以沒有,視我們的需要而定。
make
sudo make install
sudo vim /etc/ld.so.conf.d/opencv.conf
輸入/usr/local/lib
保存後,sudo ldconfig
然後sudo vim /etc/bash.bashrc
最後面添加
PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/lib/pkgconfig
export PKG_CONFIG_PATH
保存後,要重啟,不重啟用不了。

重啟後,如何測試配置正確。
cd /usr/local/share/OpenCV/samples
cd c
sudo chmod +x build_all.sh
sudo ./build_all.sh
這時會出現
/tmp/ccLJWE0c.o: In function `cvRound': opencv.c:(.text+0x19):
undefined reference to `lrint' /tmp/ccLJWE0c.o: In function
`cvDecRefData': opencv.c:(.text+0xa5c): undefined reference to
`cvFree_' opencv.c:(.text+0xacd): undefined reference to `cvFree_'
/tmp/ccLJWE0c.o: In function `cvGetRow': opencv.c:(.text+0xbc3):
undefined reference to `cvGetRows' /tmp/ccLJWE0c.o: In function
`cvGetCol': opencv.c:(.text+0xbee): undefined reference to `cvGetCols'
/tmp/ccLJWE0c.o: In function `cvReleaseMatND': opencv.c:(.text+0xc01):
undefined reference to `cvReleaseMat' /tmp/ccLJWE0c.o: In function
這類的錯誤,根據stackoverflow的帖子
http://stackoverflow.com/questions/14676018/install-opencv-and-compile-c-program-using-gcc
解決辦法是
Try adding -lm, to include the math library that provides lrint
在c後面添加-lm這個選項,修改build_all.sh
修改後的內容為
#!/bin/sh

if [ $# -gt 0 ] ; then
base=`basename $1 .c`
echo "compiling $base"
gcc -ggdb `pkg-config opencv --cflags --libs` $base.c -o $base
else
for i in *.c; do
echo "compiling $i"
gcc -ggdb `pkg-config --cflags opencv` -o `basename $i .c` $i `pkg-config --libs opencv` -lm;
done
for i in *.cpp; do
echo "compiling $i"
g++ -ggdb `pkg-config --cflags opencv` -o `basename $i .cpp` $i `pkg-config --libs opencv`;
done
fi
然後再編譯c文件就不會出錯了。
這個帖子裡提到很多有用的東西

1 添加-lm選項的理由
http://man7.org/linux/man-pages/man3/lrint.3.html
2 鏈接器的相關知識
http://www.lurklurk.org/linkers/linkers.html
http://gcc.gnu.org/onlinedocs/gcc/Link-Options.html
http://gcc.gnu.org/onlinedocs/cpp/Invocation.html#Invocation
3 共享庫的相關知識
http://www.yolinux.com/TUTORIALS/LibraryArchives-StaticAndDynamic.html
4 pkg-config的相關知識
http://www.freedesktop.org/wiki/Software/pkg-config/
5 bash shell的一些擴展
http://tldp.org/LDP/Bash-Beginners-Guide/html/sect_03_04.html

回答這個問題的人,真是個活字典。
編譯完c文件夾下的代碼,沒有錯誤,執行./delaunay,可以看到圖形界面,經典的opencv示例
如果有攝像頭,執行./fback_c,說不定能采集圖像,這點我的電腦能,但不能保證都做到。

然後把build_all.sh復制到cpp文件夾下和gpu文件夾下,cpp下沒有問題,就是gpu下提示cvconfig.h找不到,這點我沒有解決,不過不影響執行斯坦福的那段光流源碼,那麼到此opencv2.4.5配置完成。
有一點體會就是:每必要追求這麼新的版本,2.2到2.3就可以了。

更多Ubuntu相關信息見Ubuntu 專題頁面 http://www.linuxidc.com/topicnews.aspx?tid=2

Copyright © Linux教程網 All Rights Reserved