打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
Opencv在Crotex

                                                                    OpencvCrotex-A8的移植(pcduino)

也是前几个月就移植完了的,一直没机会写一个总结文档。后来想想,总结文档还是很有必要写写的,提高自己方便他人。Opencv的移植要比QT的移植难一些,我移植的时候也是参考了很多网上的文章,但是最后还是靠推断,才解决问题。Opencv这个库还是很强大的,我还是比较看好这个库在ARM平台上的运行的,现在ARM平台的速度,也不比PC差到哪里去了,移动的角度来说,还是很有优势的。我也做过DSP下的图像处理一段时间,但是DSP的话,通用性要差些,不同的芯片系类有不同的优化指令,底层算法往往改动性很大。但是同级别的DSP运算速度确实很快。

硬件:Pcduino(Cortex-a8, 1GHZ)

软件:Linux linaro-developer 3.4.29+;(无界面板,没有安装X Server图形接口)

编译环境:Ubuntu12.04 (32),交叉编译器arm-linux-gnueabihf-g++

Opencv版本:opencv-2.4.5

Cmak版本:CMake-gui 2.8.7

在编译Opencv时候,要用到很多第三方的库,所以我们要把这些第三方的库都编译好之后,才可以编译Opencv。这里我所用到的第三方库有:zlib127.zipjpegsrc.v8d.tar.gzlibpng-1.5.17 x264-snapshot-20120528-2245-stable.tar.bz2xvidcore-1.3.2.tar.gz

tiff-4.0.3.tar.gzffmpeg-0.10.3.tar.bz2,一共7个库。

考虑到要编译的库较多,我们采用设置环境变量和用shell脚本的方式来编译这些库。

首先下载这些库。这些库比较难找我在这里给出下载路径:http://pan.baidu.com/share/link?shareid=2450342524&uk=487907638

一,            设置环境变量

opencv源码目录下:

export COMPILE_PREFIX=arm-linux-gnueabihf-
export INSTALL_PREFIX=`pwd`/crosscompile_root
export DL_FOLDER=`pwd`/dl
export BUILD_FOLDER=`pwd`/buildpool
export CC=${COMPILE_PREFIX}gcc

同时建立opencv源码目录下建立crosscompile_rootdl, buildpool三个编译目录。把下载到的库源码复制到dl目录下。
这些库有相互依赖关系,所以编译的时候请按照一下顺序来。在这些库目录dl下:

1.编译zlib127.zip

pushd $BUILD_FOLDER
unzip $DL_FOLDER/
zlib127.zip
pushd zlib-1.2.7
./configure --prefix=$INSTALL_PREFIX
make
make install
popd

以上可以写作一个脚本zlib.sh,书写注意格式不该有的空格不要有。

可以看出这个库已经编译成功了。

2.编译jpeg-8d,脚本如下:

tar xf $DL_FOLDER/jpegsrc.v8d.tar.gz
pushd jpeg-8d
./configure --host=arm-linux-gnueabihf --prefix=$INSTALL_PREFIX
mkdir -p $INSTALL_PREFIX/bin
mkdir -p $INSTALL_PREFIX/man/man1
make
make install
popd

 

3编译png ,脚本如下:

tar xf $DL_FOLDER/libpng-1.5.14.tar.gz
pushd libpng-1.5.14
./configure --host=arm-linux-gnueabihf --prefix=$INSTALL_PREFIX CPPFLAGS=-I$INSTALL_PREFIX/include LDFLAGS=-L$INSTALL_PREFIX/lib
make
make install
popd

 

4编译x264-snapshot-20120528-2245-stable,脚本如下:

tar xjf $DL_FOLDER/x264-snapshot-20120528-2245-stable.tar.bz2

pushd x264-snapshot-20120528-2245-stable

./configure --host=arm-linux --cross-prefix=arm-linux-gnueabihf- --enable-shared --prefix=$INSTALL_PREFIX

make

make install

popd

 

5.编译xvidcore-1.3.2

注意此处一定要禁止汇编。脚本如下:

tar xf $DL_FOLDER/xvidcore-1.3.2.tar.gz

pushd xvidcore/build/generic    

./configure --prefix=$INSTALL_PREFIX--host=arm-linux-gnueabihf --disable-assembly

make

make install

popd

如图所示这个库安装成功。

6tiff-4.0.3

需要添加zlib支持,因此需要声明LDFLAGSCFLAGS变量。脚本如下:

tar xf $DL_FOLDER/tiff-4.0.3.tar.gz

pushd tiff-4.0.3

./configure --prefix=$INSTALL_PREFIX --host=arm-linux-gnueabihf --enable-shared

CPPFLAGS=-I$INSTALL_PREFIX/include LDFLAGS=-L$INSTALL_PREFIX/lib

make

make install

popd

 

7.ffmpeg-0.10.3

ffmpeg的配置选项较多,因此需要声明LDFLAGSCFLAGS变量。脚本如下:

tar -xjf ffmpeg-0.10.3.tar.bz2

pushd ffmpeg-0.10.3

./configure --prefix=$INSTALL_PREFIX --enable-shared --disable-static --enable-gpl --enable-cross-compile --arch=arm  --disable-stripping --target-os=linux --enable-libx264 --enable-libxvid --cc=arm-linux-gnueabihf-gcc --enable-swscale --extra-cflags=-I$INSTALL_PREFIX/include --extra-ldflags=-L$INSTALL_PREFIX/lib --disable-asm

make

make install

popd

这个库编译了较长时间,而且编译选项很多,很容易出错。

 

如果出错请大家对照截图。编译成功截图如下:

 

至此这七个库就交叉编译完成了,虽然我都以一个一个在PC机上验证的。但是shell还是很注重格式的,在网络传播过程中有些格式难免会有误。所以编译不成功的时候,自己推断一下。

 

二,配置编译opencv

完成上面的几步应该已经在crosscompile_root/lib目录下有相应的库了

cd ~/OpenCV-2.4.5/

mkdir build

build目录里建立toolchain.cmake文件,输入以下内容

set( CMAKE_SYSTEM_NAME Linux )
set( CMAKE_SYSTEM_PROCESSOR arm )
set( CMAKE_C_COMPILER arm-linux-gnueabihf-gcc )
set( CMAKE_CXX_COMPILER arm-linux-gnueabihf-g++ )
set( CMAKE_LIBRARY_PATH ~/crosscompile_root/lib                    ${CMAKE_LIBRARY_PATH})
set( CMAKE_INCLUDE_PATH ~/crosscompile_root/include                   ${CMAKE_INCLUDE_PATH})

然后执行命令:

cmake -DCMAKE_INSTALL_PREFIX=$INSTALL_PREFIX -DZLIB_INCLUDE_DIR=$INSTALL_PREFIX/lib -DPNG_INCLUDE_DIR=$INSTALL_PREFIX/lib -DJPEG_INCLUDE_DIR=$INSTALL_PREFIX/lib -DOPENCV_EXTRA_C_FLAGS="-mfpu=neon -I$INSTALL_PREFIX/include -L$INSTALL_PREFIX/lib -Wl, -rpath,$INSTALL_PREFIX/lib" -DCMAKE_TOOLCHAIN_FILE=toolchain.cmake ..

 

这是初步设置编译选项,然后我们执行cmake-gui细调,主要加上ffmpeg这个选项。去掉python,gtk,cuba,1394lib等,因为没有对应的库。

界面如下:

 

以上可以做一些相应调整,决定哪些模块可以添加。可以在CMAKE_INSTALL_PREFIX这个选项里指定make install的库安装路径,比如我的是/newOpencv2.4.5/opencv-2.4.5_libWhere is the source code里面是源码路径。Where to build the binaries里面是build路径。调整完了之后按Configure键来配置,和按Generate键来产生Makefile文件。这样可以再/build文件夹下makemake install,但是其实这个配置还是有问题,至少在我的机子上编译不过。在/build文件夹下的有个CMakeCache.txt文件,这就是我们上面调整得到编译配置文件,我们要修改如下两个地方在145行:

//Flags used by the compiler during all build types.

CMAKE_CXX_FLAGS:STRING= -mfpu=neon -I/opencv_arm/crosscompile_root/include -L/opencv_arm/crosscompile_root/lib -L/usr/arm-linux-gnueabihf/,-Wl,-rpath,/lib

可以看出来是指定编译用到的库文件,这些库文件就是我们前面编译好的。

 

188行:

//Flags used by the linker during debug builds.

CMAKE_EXE_LINKER_FLAGS_DEBUG:STRING=-lpthread –lrt

 

这两处修改完了之后,我们makemake intall。如果顺利应该就没什么问题了。至此OPENCV的库就交叉编译好了。把你得到crosscompile_root/里的库文件和opencv的库文件复制如ARM板子上即可。在PC平台交叉编译的时候在QT项目里在pro文件里面指定opencv的库路径即可,比如我们的库路径是/newOpencv2.4.5/opencv-2.4.5_lib。这时OpencvARM平台的编译就算完成了!最后说明我用QTQWS模式所以OpencvGUI函数不能用,同样OpenGL相关的也不能使用。如果想使用就去安装X11图形接口软件。当然PC机上就是用X11的图形接口,所以可以使用。

                                                                                           By 潇齐2014-4-25

转载请注明出处!

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
mosquitto移植笔记
Ubuntu交叉编译libusb库
开发环境搭建
交叉编译 mtd-utils V1.5.2
alsa移植到arm linux嵌入式系统中
iMX6系列-iMX6 Python移植
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服