您的位置:首页 > 运维架构

OpenCV移植到ARM平台---Opencv with ffmpeg to ARM移植总结

2013-09-06 11:30 197 查看
1、 linux环境:vm+fedora10(2.6.27.5)

交叉编译:4.3.3

ARM板子:TQ2440 ARM9

准备库: libz libjpeg libx264libxvid libffmpeg libpng opencvyasm-0.7.2

版本:libz: zlib-1.2.3

libjpeg: jpegsrc.v6b

libpng: libpng-1.2.18

libyasm: yasm-0.7.2

opencv: opencv-2.0.0

libx264: x264-snapshot-20110612-2245-stable

libxvid: xvidcore-1.3.2

lffmpeg: ffmpeg-0.5.3

2、 使用交叉编译器的两种方法

①设置环境变量

export PATH=$PATH:/opt/EmbedSky/4.3.3/bin

注: /opt/EmbedSky/4.3.3是交叉编译器的安装路径

②修改/etc/profile文件

在环境变量设置代码附近添加:pathmunge/opt/EmbedSky/4.3.3/bin

注:两者的区别在于作用域不同

3、 libz的交叉编译

进入解压目录进行配置安装

#CC=arm-linux-gcc ./configure --prefix=/opt/EmbedSky/4.3.3/arm-none-linux-gnueabi–shared

#make

#make install

注:CC 指定交叉编译器 --prefix 指定安装路径(以后的库文件均安装在此目录下,便于以后的编译连接) –shared 共享库

4、 libjpeg的交叉编译

进入解压目录进行配置安装

#./configure --prefix=/opt/EmbedSky/4.3.3/arm-none-linux-gnueabi--enable-shared –enable-static

#gedit Makefile(修改Makefile中cc =arm-linux-gcc ar=arm-linux-ar ar2=arm-linux-ranlib rc)

#make

#make install

注:此时系统报错,在/opt/EmbedSky/4.3.3/arm-none-linux-gnueabi/路径下新建目录man/man1,然后再次执行makeinstall 安装成功

5、 libpng的交叉编译

进入解压目录进行配置安装

#./configure --prefix=/opt/EmbedSky/4.3.3/arm-none-linux-gnueabi--enable-shared --enable-static --host=arm-linux

#make

#make install

6、 yasm的交叉编译

进入解压目录进行配置安装

#./configure --prefix=/opt/EmbedSky/4.3.3/arm-none-linux-gnueabi--enable-shared --enable-static --host=arm-linux

#make

#make install

7、 libx264的交叉编译

进入解压目录进行配置安装

#CC=arm-linux-gcc ./configure --enable-shared--host=arm-linux –disable-asm --prefix=/opt/EmbedSky/4.3.3/arm-none-linux-gnueabi

#make

#make install

8、 libxvid的交叉编译

进入build/generic目录进行配置安装

#./configure --prefix=/opt/EmbedSky/4.3.3/arm-none-linux-gnueabi--host=arm-linux --disable-assembly

#make

#make install

9、 ffmpeg的交叉编译

进入解压目录进行配置安装

#./configure --prefix=/opt/EmbedSky/4.3.3/arm-none-linux-gnueabi--enable-shared --disable-static --enable-gpl --enable-cross-compile --arch=arm--disable-stripping --target-os=linux --enable-libx264 --enable-libxvid--cc=arm-linux-gcc
--enable-swscale

#make

#make install

10、opencv2.0.0的交叉编译

进入解压目录进行配置安装

#./configure --host=arm-none-linux-gnueabi --without-gtk--without-carbon --without-quicktime --without-1394libs --with-ffmpeg--without-python --without-swig --enable-static --enable-shared --disable-appsCXX=arm-linux-g++ CPPFLAGS=-I/opt/EmbedSky/4.3.3/arm-none-linux-gnueabi/include/LDFLAGS=-L/opt/EmbedSky/4.3.3/arm-none-linux-gnueabi/lib
--with-v4l --prefix=/opt/EmbedSky/arm/opencv-arm CXXFLAGS=-O2 --libdir=/opt/EmbedSky/arm/opencv-arm/lib

--includedir=/opt/EmbedSky/arm/opencv-arm/include

#make

此时输出如下配置信息

Generalconfiguration ================================================



CXX: arm-linux-g++

CXXCPP: arm-linux-g++ -E

CPPFLAGS: -I/home/xiaofevg/new/arm/4.3.2/arm-none-linux-gnueabi/include/

CXXFLAGS: -O2

LDFLAGS: -L/home/xiaofevg/new/arm/4.3.2/arm-none-linux-gnueabi/lib



Install path: /home/xiaofevg/new/arm/4.3.2/arm-none-linux-gnueabi



Debug flags

Optimization flags -DNDEBUG -O2 -fomit-frame-pointer

MMX/SSE/SSE2/SSE3:

OpenMP support:

External BLAS & LAPACK: no



HighGUIconfiguration ================================================



Windowing system --------------

Use Carbon / Mac OS X: no

Use gtk+ 2.x: no

Use gthread: no



Image I/O ---------------------

Use ImageIO / Mac OS X: no

Use libjpeg: yes

Use zlib: yes

Use libpng: yes

Use libtiff: no

Use libjasper: no

Use libIlmImf/OpenEXR: no



Video I/O ---------------------

Use QuickTime / Mac OS X: no

Use xine: no

Use gstreamer: no

Use ffmpeg: no

Use dc1394 & raw1394: no

Use dc1394_v2 & raw1394: no

Use v4l: yes

Use v4l2: yes

Use unicap: no



Wrappers forother languages =========================================



SWIG

Python no

Octave no



Additional buildsettings ============================================



Build demo apps no



Now run make...



由此可知ffmpeg并没有编译进Opencv,查看config.log文件,阅读里面的信息可知libavutil和libx264两个库文件没有找到,由此才产生了以上的结果。在配置命令行中添加LIBS=”-lavutil –lx264”,再次make,此时输出的配置信息中Use ffmpeg: yes,配置带ffmpeg的Opencv成功。

#make install

11、将opencv-arm/lib中的动态库文件libcv.so.4.0.0,libcvaux.so.4.0.0,libhighgui.so.4.0.0,

Libcxcore.so.4.0.0,libml.so.4.0.0拷出并且重命名为*.so.4,再和上面编译出的其他动态库文件一起拷贝到开发板的/usr/lib目录下即可。至此Opencv移植完成,将交叉编译出的二进制代码拷到板子中,修改权限即可执行。

12、关于交叉编译Opencv程序时Makefile文件的编写

OBJ=test1

CC=arm-none-linux-gnueabi-g++

CFLAGS=-I/opt/EmbedSky/arm/opencv-arm/include/opencv/

LDFLAGS=-L/opt/EmbedSky/arm/opencv-arm/lib/-lcv -lcxcore -lpthread -lrt -lcvaux -lm -lpng -ljpeg -lz -lml -lhighgui -ldl-lavcodec -lavdevice -lavformat -lavutil -lswscale -lx264 -lxvidcore

$(OBJ):$(OBJ).o

$(CC) $(OBJ).c -o $(OBJ) $(CFLAGS)$(LDFLAGS)

clean:

rm-f *.o *~ $(OBJ)

当编译其他程序时,修改test1即可。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: