opencv2.0 交叉编译

来源:互联网 发布:淘宝双十一交易额2014 编辑:程序博客网 时间:2024/05/16 05:25

编译环境:

  • 编译:ubuntu16.04x86
  • 目标机:cortex-a8 linux3.0
  • 编译器:arm-linux-gcc

前言:由于做项目的要求,我们需要将opencv移植到arm体系的开发板上,经过我的测试,在开发板:cortex-a8等都可以运行正常的【ps:当时我的开发板运行 的系统版本有linux3.0, linux2.6,测试都是正常的】,整个过程耗时大概一周,我参考了网上很多的文章,在这里我总结一下。

使用文件清单

编译依赖库

我相信,你在编译库的时候可能会遇到很多问题,我下面提供的编译方法可能在你的机器上会报上一些错误【ps:在我机器正常】,这很正常,把你的库错误信息交给百度,bing,google去解决!我这里说的是主体思路。另外关于这些库的用处,应该在两处起到作用:一,ubuntu编译交叉编译opencv2.0的时候用到;二,这些库要在移植的时候移植到开发板的/lib文件夹【ps:/lib 这是开发板的默认库搜索路径,就是说你把库丢在这个目录就好了,不用设置什么搜索路径了,省事。】,具体哪些移入,我待会说。最后,arm-linux-gcc这个交叉编译器,你肯定要装好吧,没装的百度装去吧。好了,开始了。
1, libz 的交叉编译:
./configure –prefix=$OPENCV_DEPEND –shared
修改 Makefile
CC=arm-linux-gcc
AR=arm-linux-ar
RANLIB=arm-linux-ranlib
LDSHARED=arm-linux-gcc -shared-Wl,-soname,libz.so.1,–version-script,zlib.map
make
make install

2, libjpeg的交叉编译:
./configure–host=arm-linux –prefix=$OPENCV_DEPEND –enable-shared –enable-static
make
makeinstall

3, libpng 的交叉编译:
./configure –host=arm-linux–prefix=$OPENCV_DEPEND –enable-shared –enable-static
make
makeinstall

4, yasm 的交叉编译:
CC=arm-linux-gcc ./configure–enable-shared –host=arm-linux –disable-asm –prefix=$OPENCV_DEPEND
make
makeinstall

5, libx264 的交叉编译:
CC=arm-linux-gcc ./configure–enable-shared –host=arm-linux –disable-asm –prefix=$OPENCV_DEPEND
make
makeinstall

6, libxvid 的交叉编译
cd build/generic
./configure –prefix=$OPENCV_DEPEND –host=arm-linux –disable-assembly
make
makeinstall

7, ffmpeg 的交叉编译:
./configure –prefix=OPENCVDEPENDenableshareddisablestaticenablegplenablecrosscompilearch=armdisablestrippingtargetos=linuxenablelibx264enablelibxvidcc=armlinuxgccenableswscaleextraldflags=LOPENCV_DEPEND/lib --extra-cflags=-I$OPENCV_DEPEND/include
make
makeinstall
【上面的代码可能会因为排版问题出现一定问题】
如果你能正常的编译以上的库,那么最后你将可以编译opencv2.0了
8.opencv2.0 交叉编译:
进入opencv2.0.0目录:首先,修改configure文件:
gedit configure

搜索-lavcodec,定位到大概18182行的位置,在“FFMPEGLIBS=”-lavcodec -lavformat” 后添加 “-lswscale”, 修改之后变为:“FFMPEGLIBS=”-lavcodec -lavformat -lswscale $FFMPEG_SWSCALE_LIBS””,然后保存退出。
在终端中输入:
./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-apps CXX=arm-linux-g++ CPPFLAGS=-I/usr/local/arm/4.3.2/arm-none-linux-gnueabi/include/ LDFLAGS=-L/ usr/local /arm/4.3.2/arm-none-linux-gnueabi/lib –with-v4l –prefix=/usr/local/arm/4.3.2/arm-none-linux-gnueabi CXXFLAGS=-O2

make
make install

【opencv-2.0.0移植算是成功了。接下来,需要把所有的库烧写到arm板子上去,如果烧写到根目录的lib目录下,那么不用指定LD-LIBRARY-PATH,反之亦然。】
这个有个问题,你要移植的库除了第八步之后产生lib文件下的库文件【ps:以.a结尾的,.la结尾的通通不要移动,这不是动态库!移动的是后缀中有so这个字眼的,记住。】,还要移动的是之前第1-7中的某些库,为什么说某些库,你需要啥就用啥呗!比如,你要用cvloadimage这个函数加载png 和 jpeg的图片,那个你就把png还有jpeg相应的库也给复制到开发板的/lib文件夹下面。这点一定要注意,可怕的是个别开发板命名缺少库它却没有任何提示,唯独单单运行效果不对!如果遇到这个问题你要好好看看你的库了。
小插曲:在你把库复制到开发板前,请事先到开发板看看时候有相应的库,这个相应的库可能是之前做的人留下的也可能其他原因,这不重要,重要的是这个遗留的东西可能对你的库造成干扰,让你百思不解,就是运行没效果!

检测程序

下面的程序就是我当时的检测程序,如果你能顺利产生一个新的图片,那么恭喜你成功了!
小插曲:这个时候你不要用啥显示窗口的函数等,你确定你的开发板有类似qt这类的图形化工具!?我犯过这个错误,当时显示出错了,我以为库有问题,最后才知道如果想图形化显示还需要qt之类工具的支持。另外,我们一般也不需要在开发板里让图片显示出来,想看就复制出来看呗】

#include<stdio.h>#include<stdlib.h>#include"cv.h"#include"cxcore.h"#include"highgui.h"int main(int argc, char** argv ){    IplImage* in;    printf("%d\n",argc);    printf("in:%d,the1:%s\n",in,argv[1]);    if((in = cvLoadImage(argv[1], 0)))    {        printf("load\n");        IplImage* out = cvCreateImage(            cvGetSize(in),            IPL_DEPTH_8U,            1           );        printf("created\n");        cvCanny(in, out, 20 , 60, 3);        printf("down\n");        cvSaveImage(argv[2], out, 0);        return 0;    }    else     {        printf("LoadImage failed!\n");    }    return -1;}

在pc机上编译此程序
arm-linux-gcc -I/usr/local/arm/4.4.1/arm-no-linux-gnueabi/include/opencv -I/usr/local/arm/4.4.1/arm-none-linux-gnueabi/include/ -L/usr/local/arm/4.4.1/arm-none-linux-gnueabi/lib -lcv -lcxcore -lhighgui -lpng -lpng12 -ljpeg -lz opencvTest.c -o opencvTest
【ps:上面的路径你根据自己的情况改动一下】
将程序拷贝到开发板上,同时也拷贝一张图片到开发板上
我的源图片名为front.jpg 生成的图片名为front2.jpg
执行程序
./opencvTest front.jpg(原图片路径) front2.jpe(生成图片路径)
如果有front2.jpg生成,那么恭喜你成功了!

0 0
原创粉丝点击