微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > OpenCV ffmpeg移植到ARM平台

OpenCV ffmpeg移植到ARM平台

时间:11-09 来源:互联网 点击:
前一篇写了如何在移植OpenCV库到ARM平台上,本来我只是用到OpenCV的打开USB摄像头获取图像到IplImage结构中,这用到了V4L2的底层函数。然后进行视频图像的帧处理。

那么如何用OpenCV读写ARM板上的视频文件,并进行视频处理呢?这该又将如何移植呢?

这个就必须要装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

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top