新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > OpenCV ffmpeg移植到ARM平臺

        OpenCV ffmpeg移植到ARM平臺

        作者: 時間:2016-11-09 來源:網絡 收藏
        前一篇寫了如何在移植OpenCV庫到ARM平臺上,本來我只是用到OpenCV的打開USB攝像頭獲取圖像到IplImage結構中,這用到了V4L2的底層函數。然后進行視頻圖像的幀處理。

        那么如何用OpenCV讀寫ARM板上的視頻文件,并進行視頻處理呢?這該又將如何移植呢?

        本文引用地址:http://www.104case.com/article/201611/317669.htm

        這個就必須要裝x264,xvid和ffmpeg,和上一篇中講的通過V4L2底層函數獲取攝像頭視頻就有點不一樣了。

        下面就介紹一種方法。

        測試環境:Ubuntu 12.04 LTS

        OpenCV版本:1.0

        交叉編譯器:arm-none-linux-gnueabi-4.3.2

        步驟如下:

        一 交叉編譯libjpeg
        為了使OpenCV能處理jpeg圖像,我們必須事先交叉編譯好libjpeg
        這里使用的版本是jpegsrc.v6b
        1 下載libjpeg源碼:ftp://ftp.uu.net/graphics/jpeg/jpegsrc.v6b.tar.gz
        2 解壓進入目錄
        3 配置
        #./configure --prefix=/root/libjpeg-arm --exec-prefix=/root/libjpeg-arm --enable-shared
        --enable-static
        下面分別介紹這幾個參數的作用:
        --prefix=/root/libjpeg-arm : 執行make install 后,會將與體系無關的文件拷貝到此目錄下,具
        體如下:
        /root/libjpeg-arm.....................................
        |
        +---include........................................
        |
        ---jconfig.h
        |
        ---jerror.h
        |
        ---jmorecfg.h
        |
        ---jpeglib.h
        +---man............................................
        |
        +---man1.......................................
        |
        ---cjeg.1
        |
        ---djpeg.1
        |
        ---jpegtran.1
        |
        ---rdjpgcom.1
        |
        ---wrjpgcom.1
        --exec-prefix=/root/libjpeg-arm : 執行make install 后,會將與體系無關的文件拷貝到此目錄
        下,即將一些可執行程序、動態鏈接庫和靜態鏈接庫拷貝到此目錄的相應目錄下,具體如下:

        /root/libjpeg-arm........................................
        |
        +---bin............................................
        |
        ---cjeg
        |
        ---djpeg
        |
        ---jpegtran
        |
        ---rdjpgcom
        |
        ---wrjpgcom
        +---lib...........................................
        |
        ---libjpeg.la
        |
        ---libjpeg.so
        |
        ---libjpeg.so.62
        |
        ---libjpeg.so.62.0.0
        --enable-shared : 用GNU libtool編譯成動態鏈接庫 。
        4 修改生成的Makefile文件:
        # The name of your C compiler:
        CC= gcc 該成 CC= /root/arm-none-linux-gnueabi/bin/arm-none-linux-gnueabi-gcc
        (根據你自己交叉編譯器的位置修改)
        # library (.a) file creation command
        AR= ar rc 該成 AR= /root/arm-none-linux-gnueabi/bin/arm-none-linux-gnueabi-ar rc
        (同上)
        # second step in .a creation (use "touch" if not needed)
        AR2= ranlib 該成 AR2= /root/arm-none-linux-gnueabi/bin/arm-none-linux-gnueabiranlib
        (同上)
        5 在/root/libjpeg-arm目錄下建立 man/man1,include,lib,bin四個目錄
        6 # make
        # make install
        7 將/root/libjpeg-arm/include/中(jconfig.h, jerror.h, jmorecfg.h, jpeglib.h)四個頭文件拷
        貝到:/root/arm-none-linux-gnueabi/arm-none-linux-gnueabi/include中。
        將/root/libjpeg-arm/lib中(libjpeg.la, libjpeg.so, libjpeg.so.62, libjpeg.so.62.0.0)四個庫
        文件拷貝到:/root/arm-none-linux-gnueabi/arm-none-linux-gnueabi/lib中
        注意:執行以下命令檢查生成的libjpeg.so是否為ARM版:

        # file libjpeg.so
        以下為正確輸出,否則檢查交叉編譯器路徑以及Makefile并重新編譯。
        注意:執行完以上操作后執行以下命令檢查庫文件是否已正確安裝:
        # arm-linux-gcc -print-file-name=libjpeg.so
        如果輸出為"libjpeg.so"則說明沒有正確安裝,重復7步驟。
        如果輸出為"DIR/libjpeg.so"則說明安裝正確。
        至此libjpeg交叉編譯完成。
        二 交叉編譯 x264,xvid,ffmpeg
        為了使OpenCV能處理視頻,我們要事先交叉編譯ffmpeg,而ffmpeg又是依賴x264和
        xvid的。
        1 下載yasm:
        到 http://www.tortall.net/projects/yasm/wiki/Download 下載yasm0.7.2(x264需要用
        到的匯編編譯器)
        # ./configure --enable-shared --prefix=/root/arm-none-linux-gnueabi/arm-none-linuxgnueabi/
        --host=arm-linux
        # make
        # make install
        2 交叉編譯x264
        到 ftp://ftp.videolan.org/pub/videolan/x264/snapshots/ 下載x264-snapshot-20060805-
        2245.tar.bz2,解壓進入目錄
        (1).配置
        # ./configure --prefix=/root/arm-none-linux-gnueabi/arm-none-linux-gnueabi/ --enableshared
        (2).修改配置參數
        修改config.mak:
        prefix=/root/arm-none-linux-gnueabi/arm-none-linux-gnueabi/
        exec_prefix=${prefix}
        bindir=${exec_prefix}/bin
        libdir=${exec_prefix}/lib
        includedir=${prefix}/include
        # 這里改為ARM
        ARCH=ARM
        SYS=LINUX
        # 這里改為arm-linux-gcc
        CC=arm-linux-gcc
        # 這里去掉-DHAVE_MMXEXT -DHAVE_SSE2 -DARCH_X86
        CFLAGS=-Wall -I. -O4 -ffast-math -D__X264__ -DHAVE_MALLOC_H -DSYS_LINUX
        -DHAVE_PTHREAD -s -fomit-frame-pointer
        LDFLAGS= -lm -lpthread -s
        AS=nasm

        ASFLAGS=-O2 -f elf
        VFW=no
        GTK=no
        EXE=
        VIS=no
        HAVE_GETOPT_LONG=1
        DEVNULL=/dev/null
        CONFIGURE_ARGS= --enable-shared --prefix=/root/arm-none-linux-gnueabi/armnone-
        linux-gnueabi/
        SONAME=libx264.so.49
        default: $(SONAME)
        修改Makefile,將66~68行的ar和ranlib改為arm下的:
        libx264.a: .depend $(OBJS) $(OBJASM)
        arm-linux-ar rc libx264.a $(OBJS) $(OBJASM)
        arm-linux-ranlib libx264.a
        (3).編譯安裝
        # make
        # make install
        這里可以在交叉編譯鏈目錄/root/arm-none-linux-gnueabi/arm-none-linux-gnueabi/的
        lib下生成libx264.so
        3 交叉編譯xvid
        到 http://downloads.xvid.org/downloads/xvidcore-1.1.3.tar.gz 下載xvid
        下載xvid解壓并進入build/generic
        配置
        # ./configure --prefix=/root/arm-none-linux-gnueabi/arm-none-linux-gnueabi/ --disableassembly
        [解釋]--disable-assembly :因為xvid沒有針對ARM的匯編優化,所以編譯時必須關掉匯

        修改Makefile引用的platform.inc文件,將CC=gcc改為CC=arm-linux-gcc
        # make
        # make install
        成功后進入example文件夾
        測試,輸入
        arm-linux-gcc -o xvid_encraw xvid_encraw.c -lc -lm -I../src/ -L../build/generic/=build

        -lxvidcore
        即可生成xvid_encraw
        這里可以在交叉編譯鏈目錄/root/arm-none-linux-gnueabi/arm-none-linux-gnueabi/的
        include,lib下生成相應的頭文件和庫文件
        4 交叉編譯ffmpeg
        到http://download.chinaunix.net/download.php?id=5532&ResourceID=2990在這個網址
        上下載ffmpeg-0.4.9-p20051120.tar.bz2,然后解壓。
        修改configure文件,要修改的如下
        由于cc、ar、ranlib、strip都是交叉編譯環境中的執行文件,可以這樣配置
        prefix="/root/arm-none-linux-gnueabi/arm-none-linux-gnueabi/"
        cross_prefix="root/arm-none-linux-gnueabi/bin/arm-linux-"
        cpu="arm"
        配置
        # ./configure --cpu=arm --cc=arm-linux-gcc --enable-shared --disable-ffserver --enablexvid
        --enable-x264 --enable-gpl --enable-pthreads --disable-strip
        # make
        # make install
        這里可以在交叉編譯鏈目錄/root/arm-none-linux-gnueabi/arm-none-linux-gnueabi/的
        include,lib下生成相應的頭文件和庫文件
        至此,OpenCV所依賴的庫都交叉編譯完成,并在交叉編譯鏈中的include,bin,share,lib下
        有相應的文件
        三 交叉編譯OpenCV
        下載OpenCV-1.0.0源碼 http://www.opencv.org.cn/download/opencv-1.0.0.tar.gz
        解壓進入目錄配置
        # ./configure --host=arm-none-linux-gnueabi --without-gtk --without-carbon --withoutquicktime
        --without-1394libs --with-ffmpeg --without-python --without-swig --enable-static
        --enable-shared --disable-apps CXX=arm-none-linux-gnueabi-g++ CPPFLAGS=-
        I/root/arm-none-linux-gnueabi/arm-none-linux-gnueabi/include LDFLAGS=-L/root/arm-

        none-linux-gnueabi/arm-none-linux-gnueabi/lib --with-v4l --prefix=/root/opencv-arm
        --libdir=/root/opencv-arm/lib --includedir=/root/opencv-arm/include
        說明:
        --host=arm-none-linux-gnueabi :指出交叉編譯arm平臺
        --without-gtk:忽略gtk+2.0 windows
        --without-carbon: 不使用Mac OS上的X庫
        --without-quicktime
        --without-1394libs
        --without-ffmpeg
        --without-python
        --without-swig
        --enable-static :生成靜態庫
        --enable-shared :生成動態庫
        CXX=arm-none-linux-gnueabi-g++ : 指定編譯工具
        CPPFLAGS=-I/root/arm-none-linux-gnueabi/arm-none-linux-gnueabi/include :
        OpenCV會用到一些dev的包,如png.h,jpeglib.h,大部分頭文件在/usr/include下
        --prefix=/root/opencv-arm :指定安裝目錄
        -libdir=/root/opencv-arm/lib: 指定庫文件安裝位置
        --includedir=/root/opencv-arm/include:指定包含文件安裝位置
        如果配置正確,會有下面信息
        General configuration ================================================
        Compiler: arm-none-linux-gnueabi-g++
        CXXFLAGS: -Wall -fno-rtti -pipe -O3 -fomit-frame-pointer
        Install path: /root/opencv-arm
        HighGUI configuration ================================================
        Windowing system --------------
        Use Carbon / Mac OS X: no
        Use gtk+ 2.x: no
        Use gthread: no
        Image I/O --------------------

        Use libjpeg: yes

        Use zlib: yes
        Use libpng: yes
        Use libtiff: no
        Use libjasper: no
        Use libIlmImf: no
        Video I/O ---------------------
        Use QuickTime / Mac OS X: no
        Use xine: no
        Use ffmpeg: yes
        Use dc1394 & raw1394: no
        Use v4l: yes
        Use v4l2: yes
        Wrappers for other languages =========================================
        SWIG
        Python no
        Additional build settings ============================================
        Build demo apps no
        Now run make ...
        ===================================================================
        ===
        # make
        # make install
        arm上運行OpenCV所需庫:
        1 將/root/opencv-arm/lib下生成的庫文件
        libcvaux.so.1.0.0
        libcv.so.1.0.0
        libcxcore.so.1.0.0
        libhighgui.so.1.0.0
        libml.so.1.0.0
        拷出來全部重命名
        *.so.1
        2 加上之前的庫文件,將/root/arm-none-linux-gnueabi/arm-none-linux-gnueabi/lib下的
        libjpeg,xvid,x264,ffmpeg庫都拷出來放去板子的/usr/lib或者/lib下,也可以到板子上一
        個文件夾,然后#export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/YOUR/lib/DIR
        3 OpenCV所需庫總表:


        編譯源文件方法
        arm-none-linux-gnueabi-g++ demo.c -o demo -I/root/opencv-arm/include/opencv
        -L/root/opencv-arm/lib -lcv -lcxcore -lpthread -lrt -lcvaux -lm -lpng -ljpeg -lz -lml -lhighgui
        -ldl
        最后,將生成的二進制文件拷到板子上就可運行



        關鍵詞: OpenCVffmpegARM平

        評論


        技術專區

        關閉
        主站蜘蛛池模板: 大埔县| 邵阳县| 东乡| 安岳县| 固安县| 西林县| 五河县| 泸水县| 东阳市| 永仁县| 黑河市| 泉州市| 嘉祥县| 宝兴县| 阆中市| 从江县| 尼玛县| 周至县| 桐梓县| 古田县| 邹城市| 东山县| 手游| 咸宁市| 抚松县| 喀喇沁旗| 寿阳县| 乃东县| 阜新市| 泽普县| 莆田市| 彭阳县| 肇州县| 茂名市| 旬邑县| 门头沟区| 临清市| 黄石市| 鄂伦春自治旗| 红原县| 晋宁县|