《嵌入式系统开发技术》设计报告.docx
《《嵌入式系统开发技术》设计报告.docx》由会员分享,可在线阅读,更多相关《《嵌入式系统开发技术》设计报告.docx(15页珍藏版)》请在冰豆网上搜索。
《嵌入式系统开发技术》设计报告
嵌入式系统开发技术
设计报告
组长:
成员:
中国石油大学(华东)计算机与通信工程学院计算机科学系
二0年12月
设计名称
OpenCV在Android环境下的移植与应用
完成时间
20**年12月
验收时间
20**年12月
本组成员情况
姓名
学号
承担的任务
成绩
张
71216
制定计划,项目进度安排,移植OpenCV到android,开发OpenCV在安卓中的应用
郑
71309
搜集资料,学习Opencv程序设计,开发OpenCV在安卓中的应用
林
71214
配置安卓开发环境,学习安卓中jni的使用方法,开发OpenCV在安卓中的应用
1、引言
OpenCV的全称是:
OpenSourceComputerVisionLibrary。
OpenCV是一个基于(开源)发行的跨平台计算机视觉库,可以运行在Linux、Windows和MacOS操作系统上。
它轻量级而且高效——由一系列C函数和少量C++类构成,同时提供了Python、Ruby、MATLAB等语言的接口,实现了图像处理和计算机视觉方面的很多通用算法。
它的应用领域非常广泛,包括人机互动、物体识别、图像分割、人脸识别、机器视觉、汽车安全驾驶等。
随着手机性能的不断提高,OpenCV往安卓上移植已经成为可能,安卓设备移植上OpenCV之后将能够进行复杂的图像处理和视频分析工作,人们不必拘泥于使用固定的设备进行图像以及视频的处理,从而增加了处理的灵活性。
本课程设计实现的就是OpenCV到安卓的移植以及在安卓上实现一个简单的图像处理应用。
Android应用程序是通过AndroidSDK(SoftwareDevelopmentKit)利用Java编程语言进行开发,同时也可以通过JNI调用C动态库,不过这种开发方式存在技术障碍,伴随着AndroidNDK(NativeDevelopmentKit)的问世,使得“JAVA+C”的开发方式走向成熟。
2、总体设计
1、功能描述
本课程设计分为以下四个模块,各模块功能介绍如下:
Android-OpenCV项目:
OpenCV中大部分重要API在该项目中已经封装成了JAVA接口,为安卓上的OpenCV开发提供C、C++函数支持。
AndroidNDK:
它包括从C/C++生成原生代码库所需要的工具和buildfiles,能够将一致的原生库嵌入可以在Android设备上部署的应用程序包文件(applicationpackagesfiles,即.apk文件)中,支持所有未来Android平台的一些列原生系统头文件和库。
在本课程设计中担任重要角色,包括交叉编译OpenCV源代码、编译测试程序等。
Cygwin:
Windows下模拟Linux操作环境,在其中执行NDK编译。
Eclipse:
Android开发环境,开发android程序,生成可执行的.apk文件,连接真机或虚拟机进行调试。
2、设计特色
本课程设计的特色在于成功的将android-opencv移植到eclipse开发环境中去,实现了在android设备开发图像处理、视频分析应用,提高了android设备的使用价值。
编译环境采用AndroidNDK+Cygwin,方便开发者在windows环境下开发“java+c”程序。
3、
体系结构
C代码开发环境:
Java代码开发环境:
3、详细设计
1、AndroidNDK开发环境搭建
(1)、NDK下载
本课程设计使用的NDK版本是android-ndk-r4-crystax,这是一款面向android的编译工具,下载后解压,存放位置自己定义,我放在G盘根目录下。
(2)、Cygwin下载
由于NDK编译代码时必须要用到make和gcc,所以必须搭建一个Linux环境,下载Cygwin,安装时要注意一下几点:
安装目录最好不要放在有中文和空格的目录里;在选择需要下载的包时,由于不清楚各个包的用途,为了避免出错,所以选择了全部下载;由于是从国外站点下载资源,速度稍微有些慢,大约1~2个小时,期间应确保网络通畅。
安装后在系统环境变量Path中加入cygwin的bin和android-ndk-r4-crystax的路径,检测是否安装成功,打开CygwinTerminal,在命令行输入“cygcheck-ccygwin”,会打印出当前cygwin的版本和运行状态,显示status是“OK”,则表示安装成功,否则需要重新安装。
下面需要配置NDK环境变量,配置文件为.bash_profile,我的文件目录是D:
\cygwin\home\zhangyu\.bash_profile,在文件末尾添加“NDK=/cygdrive/< 你的盘符 >/”,为了区分该NDK版本,我写的是:
ndk_r4=/cygdrive/g/android-ndk-r4-crystaxexportndk_r4,“ndk_r4”这个名字是自己定义的,方便记忆。
保存后,关闭终端,重启,
终端,可能会出现一下错误:
导致这个错误的原因是使用了windows环境下的编辑环境,在Linux下存在不兼容的问题,在该文件目录下输入“dos2unix.bash_profile”,以Unix标准规范该文件即可消除错误。
输入“cd$ndk_r4”,如果跳到该目录下,则表明ndk环境变量配置成功。
下面对NDK所带的一个例子进行编译,如下图所示:
编译后生成libhello-jni.so文件,将该工程导入eclipse,编译运行,结果如下:
至此,AndroidNDK开发环境搭建完毕。
2、Android-OpenCV移植
移植方法参照CSDN的一篇博文,下载Android-OpenCV源码包,存放到G盘根目录
下,该源码包已经写好了交叉编译Opencv的Makefile文件和Opencv的AndroidLibraryProject,用于本课程设计,需要修改以下几个地方:
(1)build.sh文件
将“ndk-build”替换为“cygdrive/g/android-ndk-r4-crystax/ndk-build”,用于明确所使用的ndk-build的具体路径。
(2)clean.sh文件
同上。
将android-ndk-r4-crystax整个文件夹拷贝到D:
\cygwin\home\zhangyu下,因为在opencv源码包中的local.env文件中指定的ANDROID_NDK_ROOT=$(HOME)/android-ndk-r4-crystax。
或者在此处更改NDK目录,总之目的就是正确的找到NDK工具所在目录。
下面编译Opencv,打开Cygwin终端,进入opencv目录,运行build.sh,编译大约持续30分钟,编译成功后,在android/libs/armeabi和armeabi-v7a两个文件夹下生成libandroid-opencv.so文件,用于Android开发的opencv库文件生成成功。
打开eclipse,将android文件夹下的工程导入到eclipse工作空间中,导入后运行该工程,在虚拟机上无任何反应,eclipse控制台输出如下信息:
下面运行opencv源码包自带的android应用,启动cygwin终端,进入例子程序CVCamera目录下:
编译成功,将该工程导入eclipse,连接手机,选择在真机上运行,运行结果如下:
表示androi-opencv移植成功,该eclipse开发环境具备了使用opencv进行android应用开发的功能。
3、Android-OpenCV应用实例
我们自己开发了一个简单的图片处理的应用,功能是对彩色图片进行灰度处理和加入噪点处理。
新建androidproject,导入opencv库工程bin目录下的opencv.jar,这样新建的工程就可以调用java封装的opencv函数。
该工程用到了一个activity和一个layout,布局界面代码如下:
Activity_main.xml
xmlversion="1.0"encoding="utf-8"?
>
android=""
xmlns:
tools=""
android:
orientation="vertical"
android:
layout_width="match_parent"
android:
layout_height="match_parent">