在linux中安裝opencv 2.1-正常使用視頻文件

關於opencv的安裝,相關的教程有很多,但大部分都比較簡略,以至於即便成功安裝後,在使用中仍有很多問題,如cvCreateFileCapture函數始終返回空指針,本文集中講述如何正確配置,以使得opencv可以處理常用視頻文件。


簡介:
Opencv庫使用多種其它開源庫作爲工具和擴展,在linux下,一般採取源代碼編譯的方式安裝opencv,這就需要預先安裝所需的工具庫,例如ffmpeg提供各種視頻編解碼, Intel TBB提供並行運算功能等等。但這些庫並不是必須的,如果沒有安裝,Opencv一樣可以正常編譯並安裝,這就導致了使用中的一些奇怪的問題,例如無法讀寫視頻。其實opencv可以使用原始格式的視頻文件,但這種文件格式極大,沒有實際價值,要想使用常用的壓縮格式視頻,例如mpeg4 則必須安裝ffmpeg庫。

過程:
一 安裝ffmpeg
1、刪除舊版ffmpeg:如果系統曾經安裝過舊版ffmpeg,一定要刪除,否則與新版有衝突 $ yum remove faad2faac
2、下載ffmpeg並解壓到一個臨時文件夾 (自己找吧)
3、進入上述文件夾中,執行配置腳本
./configure –enable-shared –enable-gpl --enable-swscale
編譯動態鏈接庫,允許按gpl的方式使用庫, 
編譯swscale庫(最新版ffmpeg,這個是默認的)
4、make && makeinstall 
所有的庫文件默認安裝在/usr/local/lib 下, 所有的頭文件安裝在/usr/local/include/lib…下,也可以改變默認安裝位置(在configure 最後添加–prefix=DIR)。
驗證下 :ffplay anyvideofile 

二 安裝pkg-config
pkg-config是一個庫文件安裝信息管理工具,它可以返回已安裝的庫文件及其相關頭文件的位置信息。安裝這個極容易,自己下載安裝把。
pkg-config 通過各個庫文件的.pc文件識別已安裝的庫文件的信息,這些.pc文件是由各庫的安裝程序自己生成的,例如ffmpeg安裝程序會在/usr/local/lib/pkgconfig目錄下提供libavcodec.pc libswscale.pc等5個.pc文件,分別對應安裝的五個庫文件。
但pkg-confg默認只搜索/usr/lib/pkgconfig目錄,去尋找.pc文件,這裏需要添加一個環境變量PKG_CONFIG_PATH=/usr/local/lib/pkgconfig,使得pkg-config可以找到ffmpeg的安裝信息。

三 安裝cmake
cmake 是一個跨平臺makefile生成工具,是編譯新版opencv所必須的工具。
直接下載安裝cmake到一個合適的位置,並將cmake安裝目錄下的bin目錄加入PATH環境變量,cmake的使用詳見下述說明。

四 安裝opencv
1、下載最新版opencv源代碼 for linux.
2、在源代碼目錄下 mkdir release && cdrelease
3、cmake ../ (重點)
使用cmake 生成編譯opecv的Makefile 文件, ../ 是opencv的源代碼目錄,裏面包含了預置的cmake配置文件CmakeLists.txt。
這裏的輸出,會顯示默認配置下,各模塊的檢測情況,重點是opencv所需工具庫是否被檢測到,例如視頻編解碼庫、TBB庫等。
查看CmakeLists.txt文件可知,cmake使用pkg-config獲取所需的庫文件的信息,這就是爲什麼一定要安裝pkg-config的原因。
如果你看到FFMPEG及其下各子項的值爲1,ok,檢測到了,如果爲0,覈對1、2兩步驟,看是否成功安裝了ffmpeg,以及pkg-config是否可以檢測到ffmpeg:
使用 pkg-config –list-all | grep libavcodec 。
4、 cmkae-gui ../
若你想改變opencv的默認編譯模式,用cmake的圖形模式可以編輯一大堆的編譯參數,例如是否支持IPP、TBB等等,這裏比較討厭的是,圖形模式下,你看不到選擇的模塊是否被正確檢測到,要再運行cmake ../ 查看。
5、 make && make install 默認opencv將被安裝在 /usr/local/ 下。
6、 編輯環境變量 LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib以使得系統可以找到opencv的動態鏈接庫。

到這裏,opencv安裝完畢,並可讀寫幾乎全部常見視頻文件,你可以使用g++直接編譯你的例程,如果你的pkg-config配置正確,以下指令可以運行:
g++ -o my_example my_example.cpp `pkg-config opencv --cflags--libs`
pkg-config opencv --cflags –libs 將返回opencv的頭文件和庫文件的編譯參數。

注 :
1、 如果你使用本文所述方法編譯 opencv 1, 則必須改動opencv的源代碼,以使得opencv可以找到ffmpeg的頭文件,老版ffmpeg的頭文件放置位置與新版不同,opencv 1找不到相關文件。 Opencv 2.1 做了處理,可以找到任意版本的ffmpeg頭文件。
2、 如果你使用的fedora系統,則selinux security可能阻止你訪問ffmpeg的動態庫,以下指令解決:
$ chcon -t textrel_shlib_t '/usr/lib/libavutil.so.50'
$ chcon -t textrel_shlib_t '/usr/lib/libavcodec.so.52'
$ chcon -t textrel_shlib_t '/usr/lib/libavformat.so.52'
$ chcon -t textrel_shlib_t '/usr/lib/libswscale.so.0'
注意,根據你安裝的ffmpeg版本的不同,最後的數字會有所不同,到/usr/local/lib中查看具體的文件名。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章