OpenCV是眼下开源项目中最著名的基于机器视觉方向的图像处理的开发包,眼下已经有被移植到嵌入式Linux环境上。

本文介绍了OpenCV交叉编译的基本步骤。

在opencv交叉编译之前要先进行依赖库的交叉编译,然后才干进行opencv库的交叉编译(由于opencv依赖于非常多库函数,假设不编译会造成,编译后的opencv无法使用)这里首先给出OpenCV交叉编译时各个库的依赖关系:

OpenCV

|——–zlib

|——–jpeg

|——–libpng

|——–zlib

|——–tiff

|——–zlib

|——–ffmpeg

|——–x264

|——–xvidcore

当中各个源代码包之间的依赖关系还是有一定的讲究,否则非常easy编译努通过,这里建议下载较新的稳定版进行交叉编译,以下列出了本人的配置环境:

一、编译环境及库文件

linux环境:ubuntu12.04

交叉编译:4.3.2

arm板子:iTOP4412开发板

libz:

libjpeg:

libpng:

libyasm:

opencv:

libx264:

libxvid:

lffmpeg:

cmake:

二、opencv-2.4.9的移植过程

1、libz的交叉编译:

./configure –prefix=/usr/local/arm/4.3.2/arm-none-linux-gnueabi/zlib-install –shared

改动makefile

CC=arm-linux-gcc

AR=arm-linux-ar

RANLIB=arm-linux-ranlib

CDSHARED=arm-linux-gcc -shared -wl, -soname,libz.so.1,–version-script,zl lib.map (不一样没关系仅仅改前面编译器)

make

make install

2、libjpeg的交叉编译:

./configure –host=arm-linux –prefix=/usr/local/arm/4.3.2/arm-none-linux-gnueabi/libjpeg-install –enable-shared –enable-static

make

make install

3、libpng的交叉编译:

./configure –host=arm-linux –prefix=/usr/local/arm/4.3.2/arm-none-linux-gnueabi/libpng-install –enable-shared –enable-static

make

make install

4、yasm的交叉编译:

./configure –host=arm-linux –prefix=/usr/local/arm/4.3.2/arm-none-linux-gnueabi/yasm-install –enable-shared –enable-static

make

make install

5、libx264的交叉编译:

CC=arm-linux-gcc ./configure –enable-shared –host=arm-linux –disable-asm –prefix=/usr/local/arm/4.3.2/arm-none-linux-gnueabi/libx264-install

make

make install

6、libxvid的交叉编译:

cd build/generic

./configure –prefix=/usr/local/arm/4.3.2/arm-none-linux-gnueabi/libxvid-install –host=arm-linux –disable-assembly

make

make install

#

注意:

在继续下一步之前须要拷贝之前编译好的库即每一个-install/lib/下的文件到/usr/local/arm/4.3.2/arm-none-linux-gnueabi/opencv-depend以下不然后面会提示找不到库(多谢群里的朋友反映这个问题)

(–extra-cflags=”-l usr/local/arm/4.3.2/arm-none-linux-gnueabi/opencv-depend”

这个命令制定了依赖库文件夹路径以供configure查找)

#

7、ffmpeg的交叉编译:

./configure –prefix=/usr/local/arm/4.3.2/arm-none-linux-gnueabi/ffmpeg-install –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-cflags=”-L usr/local/arm/4.3.2/arm-none-linux-gnueabi/opencv-depend”

make

make install


到此全部依赖库编译安装完毕

安装文件夹在:/usr/local/arm/4.3.2/arm-none-linux-gnueabi/

每一个库有各自的-install文件夹

新建文件夹

mkdir /usr/local/arm/4.3.2/arm-none-linux-gnueabi/opencv-depend/

然后拷贝全部-install下的lib下的文件到opencv-depend文件夹下


8.cmake-gui安装(自己下载)

到官网上下载已经编译好的cmake-2.8.8-Linux-i386.tar,gz,解压就能够了

9、opencv2.4.9的交叉编译:

用到的主要文件夹说明:

交叉编译工具链所在文件夹 /usr/local/arm/4.3.2/

安装opencv的文件夹 /usr/local/arm/opencv-install

opencv源代码所在文件夹 /usr/local/arm/opencv2.4.9

编译好的opencv库所在文件夹 /usr/local/arm/opencv-2.4.2/build

10.配置cmake(这一步的目的是配置编译器并让cmake-gui找到全部共享库不然cmake-gui会少非常多选项由于没有发现依赖库,比如你直接cmake-gui就没有v4l选项,直接导致移植成功后无法打开摄像头,别问我是怎么知道的..说多了都是泪啊)

cd opencv-2.4.9

mkdir build

cd build

vim toolchain.cmake

内容例如以下

#####user defined

set( CMAKE_SYSTEM_NAME Linux )

set( CMAKE_SYSTEM_PROCESSOR arm )

set( CMAKE_C_COMPILER arm-none-linux-gnueabi-gcc )

set( CMAKE_CXX_COMPILER arm-none-linux-gnueabi-g++ )

#####user defined

set( CMAKE_FIND_ROOT_PATH” /usr/local/arm/4.3.2/arm-none-linux-gnueabi/opencv-depend/ ” )

set( CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER )

set( CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY )

set( CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY )

#

然后运行这一步

cmake -DCMAKE_TOOLCHAIN_FILE=toolchain.cmake ../

11.配置cmake-gui

cmake-gui







选择源代码文件夹/usr/local/arm/opencv-2.4.9/

选择Build文件夹:/usr/local/arm/opencv-2.4.2/build

点击Configure。保持generator为Unix Makefiles(不用改),选择Specify options for cross-compiling(最后一个选项),点击Next,

Operating System填写arm-linux

C Compilers填写/usr/local/arm/4.3.2/bin/arm-linux-gcc

C++ Compilers填写/usr/local/arm/4.3.2/bin/arm-linux-g++

程序库的Target Root填写/usr/local/arm/4.3.2/

然后点击Finish。

默认安装文件夹为/usr/local,改为/usr/local/arm/opencv-install(由于之前安装了x86的opencv在usr/local为了避免弄混了)

CMAKE_INSTALL_PREFIX /usr/local/arm/opencv-install

改动选项(假设不改make会出现非常多错误由于找不到库)

去掉WITH_CUDA

去掉WITH_GTK

去掉WITH_1394

去掉WITH_GSTREAMER

去掉WITH_LIBV4L(后边有v4l这个没用不要选)

去掉WITH_TIFF

去掉BUILD_OPENEXR

去掉WITH_OPENEXR

去掉BUILD_opencv_ocl

去掉WITH_OPENCL

完毕后Generate

改动CMakeCache.txt,CMAKE_EXE_LINKER_FLAGS原来为空,加上-lpthread -lrt,

点击Generate生成Makefile。(203行附近有小引號能够带着像这样’-lpthread -lrt’)

make(出现错误通常是选多了或者前面做错了make clean)

make install


12.最后

另一步特别关键 。须要把/usr/local/arm/opencv-install/lib 下全部的动态链接库 复制到交叉编译下/usr/local/arm/4.3.2/arm-non-linux-gnueabi/lib下


三、測试

測试程序:(qt设置)







四.复制到开发板运行

1.将/usr/local/arm/opencv-install/lib/下的库复制到开发板/lib/下

2.#mkdir /usr/local/arm/opencv-install/lib/

并拷贝上述库到mkdir /usr/local/arm/opencv-install/lib/

3.拷贝opencv-depend下库到开发板/lib/下

4.拷贝測试程序到开发板/bin/文件夹下赋予可运行权限chmod 777 CamaraGet

5. cd /bin/

./ CamaraGet –qws &

(假设提示库找不到原因是你编译的库建立了相似快捷方式的东西而你拷贝的库没有拷贝快捷方式所以程序连接的时候找不到快捷方式,能够将你的库改名成提示缺少的库名(快捷方式名)基本上就是去掉版本号后缀比如

( mv libopencv_core.so.2.4.9 libopencv_core.so.2.4 )

以下是文件文件夹演示样例





五.说明

开发板USB摄像头预览节点是/dev/video4 opencv调cam = cvCreateCameraCapture(204); 这个函数的意思是打开video4网上非常多讨论括号中的參数仅仅要有: 0 , -1, 202 但要依据你自己的情况改,实測204(在板子上能够)

所需依赖库在这里下载

http://download.csdn.net/detail/engineer_wjr/9419761

交叉编译好的依赖库在这里

http://download.csdn.net/detail/engineer_wjr/9419761

移植opencv2.4.9到itop4412开发板的更多相关文章

  1. [资料分享]迅为iTOP4412开发板-SDIO WiFi移植文档

    本文转自迅为:http://www.topeetboard.com 概述 近期需要把WiFi无线网络功能移植到iTOP-4412 开发平台,查阅了相关资料,经过一段时间的研究.调试,终于成功的将WiF ...

  2. 【分享】iTOP4412开发板-Bluetooth移植文档

    [分享]iTOP4412开发板-Bluetooth移植文档 最近须要把Bluetooth移植到iTOP-4412 开发平台.查阅了相关资料,经过一段时间的研究.调试,最终成功的将蓝牙功能移植到了开发板 ...

  3. iTOP-4412开发板qt4文件的移植和修改

    在 7.4 小节介绍配置文件的时候,提到迅为制作的触摸库文件“/usr/local/tslib”,迅为 已经将触摸功能编译到 Qt/E4.7.1 的库文件中,开发板可以支持触摸和鼠标功能. 用户在前面 ...

  4. 学习itop4412开发板有哪些资料可学习?能否学会

    1.光盘资料 下面简单的做一下了解,在需要使用这些资料的时候,会针对性的做详细介绍. 将文件以及文件夹按照“名称+递增”的方式排列,如下: 01_PCB_SCH_DATASHEET-- -----开发 ...

  5. [嵌入式开发板]iTOP-4412开发板linux 系统存储空间的修改

    平台:iTOP-4412开发板 这里我们以修改成 1G 存储空间为例来讲解修改方法, 如果需要改 成其他大小的存储空间,参照此方法修改即可. 首先连接好 iTOP-4412 开发板的调试串口到 pc  ...

  6. [转载]在iTOP-4412开发板上调试helloworld应用

    本文转自迅为论坛:http://www.topeetboard.com 1.安装ADB驱动 在开发板上调试 Android 应用,首先要安装 ADB 驱动. 通过“SDK Manager.exe”来安 ...

  7. 迅为iTOP-4412开发板Ubuntu操作系统烧写方法

    本文转自:http://www.topeetboard.com Ubuntu系统烧写硬件平台:iTOP4412开发板 需要准备:串口线.读卡器.一张SD卡最好是2G(自备).另外一张卡(大于等于2G都 ...

  8. 学习嵌入式Linux-选择iTOP-4412开发板

    部分视频观看地址: [视频教程]iTOP-4412开发板之学习方法--致初学者 http://v.youku.com/v_show/id_XNzQ5MDA4NzM2.html [视频教程]三星Exyn ...

  9. iTOP-4412开发板低功耗高性能的开源硬件平台——上手评测

    iTOP-4412开发板现在比较热门的开发板,笔者近期入了一套.也推荐给初学ARM的朋友学习,4412开发板搭载三星Exynos四核处理器,配备1GB内存,4GB固态硬盘EMMC存储,兼具快速读取与超 ...

随机推荐

  1. 【homework #1】第一次作业被虐感受

    当大二暑假结束,我发现我还是没有熟练掌握一门编程语言时,我就知道苦日子要来了. 这不,才开学第三周,就已经被虐的体无完肤了.连编译课用C语言写的词法分析,都要写很久.Debug很久才能写出来,更别提大 ...

  2. nyoj 题目14 会场安排问题

    会场安排问题 时间限制:3000 ms  |  内存限制:65535 KB 难度:4   描述 学校的小礼堂每天都会有许多活动,有时间这些活动的计划时间会发生冲突,需要选择出一些活动进行举办.小刘的工 ...

  3. 优化脚本性能 Optimizing Script Performance

    This page gives some general hints for improving script performance on iOS. 此页面提供了一些一般的技巧,提高了在iOS上的脚 ...

  4. 一些NGINX配置

    一些nginx配置 使用独立目录, 然后include具体配置 gzip on for multi processers static file cache proxy pass 静态目录 or 文件 ...

  5. 异常为"当IDENTITY_INSERT设置为OFF时" 解决办法

    当 IDENTITY_INSERT 设置为 OFF 时,不能向表"A" 中的标识列插入显示值. 一般来说是自增ID造成的. 因此可以在数据库insert语句前加上 SET iden ...

  6. 做一个APP

    前言 有点零乱,但是我想写下来慢慢整理,搭建一个好点的工程-模式MVC, 会包括一些第三方库,动画库,第三方库管理关联,自定义常用控件的管理和关联 1.预编译文件的创建 在build setting ...

  7. Hibernate逆向工程生成代码

    编辑此文章,其目的是方便以后根据表生成相应的代码,然而并非所有的代码都是如此.这里的Hibernate 即响应题目的ssh框架中的“h”. 如图所示,点击右上角,在myeclipse之中.再点击Mye ...

  8. iOS多线程:『GCD』详尽总结 ---(转)

    文章:https://bujige.net/blog/iOS-Complete-learning-GCD.html 文中 Demo 我已放在了 Github 上,Demo 链接:https://git ...

  9. BZOJ1709超级弹珠

    1709: [Usaco2007 Oct]Super Paintball超级弹珠 Time Limit: 5 Sec  Memory Limit: 64 MBSubmit: 352  Solved:  ...

  10. 通过 jsp+ajax+servlet+webservice 远程访问天气预报服务

    通过 jsp+ajax+servlet+webservice 远程访问天气预报服务   - webservice 客户端访问的方式     1. java代码来访问     2. ajax 方式异步加 ...