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. OgnlContext 源码

    // Copyright (c) 1998-2004, Drew Davidson and Luke Blanshard package ognl; import ognl.enhance.Local ...

  2. SQL语句操作符优化

    转载地址:http://database.51cto.com/art/200903/112810.htm IN 操作符 用IN写出来的SQL的优点是比较容易写及清晰易懂,这比较适合现代软件开发的风格. ...

  3. 【bzoj2132】圈地计划 网络流最小割

    题目描述 最近房地产商GDOI(Group of Dumbbells Or Idiots)从NOI(Nuts Old Idiots)手中得到了一块开发土地.据了解,这块土地是一块矩形的区域,可以纵横划 ...

  4. 修改Linux内核参数 减少TIME-WAIT

    编辑/etc/sysctl.conf文件 增加 net.ipv4.tcp_syncookies = 1net.ipv4.tcp_tw_reuse = 1net.ipv4.tcp_tw_recycle ...

  5. 求中位数为K的区间的数目

    给定一个长为 $n$ 的序列和常数 $k$,求此序列的中位数为 $k$ 的区间的数量.一个长为 $m$ 的序列的中位数定义为将此序列从小到大排序后第 $\lceil m / 2 \rceil$ 个数. ...

  6. BZOJ3129 [Sdoi2013]方程 【扩展Lucas】

    题目 给定方程 X1+X2+. +Xn=M 我们对第l..N1个变量进行一些限制: Xl < = A X2 < = A2 Xn1 < = An1 我们对第n1 + 1..n1+n2个 ...

  7. 团子最大家族(clannad)

    团子最大家族(clannad) 题目描述 bx2k有许多五颜六色的萌萌哒团子.每个团子有一种颜色. 他决定将m个团子排成一排.为了美观,他要求任何相邻的两个团子不能有相同的颜色. 因为bx2k很懒,因 ...

  8. 山贼集团 (group)

    山贼集团 (group) 题目描述 某山贼集团在绿荫村拥有强大的势力,整个绿荫村由N个连通的小村落组成,并且保证对于每两个小村落有且仅有一条简单路径相连.小村落用阿拉伯数字编号为1,2,3,4,-,n ...

  9. vue子组件向父组件传递数据

    子组件 <template> <div id="header"> <input type="text" v-model=" ...

  10. Linux下实现mysql数据库每天自动备份

    Linux下实现mysql数据库每天自动备份 1.基本操作步骤 a.创建备份目录 mkdir -m 777 /home/wwwroot/backup b.创建备份脚本sh vim /home/wwwr ...