opencv2.0 交叉编译

本文提供了一份详细的指南,介绍了如何将OpenCV 2.0移植到ARM平台,包括所需的依赖库编译步骤及注意事项。通过遵循本文档,读者能够成功地为ARM设备构建OpenCV环境。

编译环境:

  • 编译: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生成,那么恭喜你成功了!

### OpenCV4 ARM 交叉编译教程 #### 准备工作环境 为了成功完成OpenCV4的ARM交叉编译,需要准备适合的工作环境。这包括安装必要的依赖项以及设置好交叉编译工具链。 对于Linux系统而言,在开始之前应当确保已经安装了基本构建工具和库文件[^1]: ```bash sudo apt-get update && sudo apt-get install cmake git libgtk2.0-dev pkg-config \ libavcodec-dev libavformat-dev libswscale-dev python-dev python-numpy \ libtbb2 libtbb-22-dev ``` #### 获取源码并解压 下载官方发布的最新版OpenCV压缩包或者通过Git克隆仓库获取最新的开发分支。这里推荐使用稳定版本来减少可能出现的问题。 #### 配置CMake选项 进入解压后的目录创建一个新的子文件夹作为构建空间,并切换至该位置执行cmake命令进行预处理操作。特别注意的是要指明目标平台架构参数和其他特定于嵌入式的优化开关[^3]: ```bash mkdir build && cd build cmake -DCMAKE_TOOLCHAIN_FILE=../platforms/linux/arm-gnueabi.toolchain.cmake \ -D CMAKE_INSTALL_PREFIX=/usr/local/opencv4_arm64 .. ``` 上述指令中的`CMAKE_TOOLCHAIN_FILE`变量指向了一个描述目标硬件特性的脚本;而`CMAKE_INSTALL_PREFIX`则定义了最终产物应该放置的位置。 #### 编译过程 一旦完成了所有的前期准备工作之后就可以调用make来进行实际意义上的编译流程了。考虑到性能因素可以选择多线程模式加快速度: ```bash make -j$(nproc) ``` 此命令会利用尽可能多的核心资源加速整个编译进度直到结束为止。 #### 安装阶段 当所有模块都被正确无误地编译完毕以后便可以将其部署到先前设定好的路径下了。如果希望立即生效还需要更新动态链接器缓存以便让新加入的内容能够被识别出来: ```bash sudo make install sudo ldconfig /usr/local/opencv4_arm64/lib/ ``` 最后一步是为了验证是否一切正常运行测试程序以确认安装成果[^2]: ```cpp #include <opencv2/opencv.hpp> using namespace cv; int main(int, char**) { Mat image; image = imread("/path/to/image.jpg"); // Read the file if(image.empty()) // Check for invalid input { std::cout << "Could not open or find the image\n"; return -1; } namedWindow( "Display window", WINDOW_AUTOSIZE );// Create a window for display. imshow( "Display window", image ); // Show our image inside it. waitKey(0); // Wait for a keystroke in the window return 0; } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值