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

ARM 257浏览

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即可。