opencv2.0 交叉编译

编译环境:

  • 编译: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= O P E N C V D E P E N D − − e n a b l e − s h a r e d − − d i s a b l e − s t a t i c − − e n a b l e − g p l − − e n a b l e − c r o s s − c o m p i l e − − a r c h = a r m − − d i s a b l e − s t r i p p i n g − − t a r g e t − o s = l i n u x − − e n a b l e − l i b x 264 − − e n a b l e − l i b x v i d − − c c = a r m − l i n u x − g c c − − e n a b l e − s w s c a l e − − e x t r a − l d f l a g s = − L OPENCV_DEPEND --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 --extra-ldflags=-L 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
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值