您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 公司方案 > 《嵌入式系统开发技术》设计报告
嵌入式系统开发技术设计报告组长:成员:中国石油大学(华东)计算机与通信工程学院计算机科学系二0年12月设计名称OpenCV在Android环境下的移植与应用完成时间20**年12月验收时间20**年12月本组成员情况姓名学号承担的任务成绩张71216制定计划,项目进度安排,移植OpenCV到android,开发OpenCV在安卓中的应用郑71309搜集资料,学习Opencv程序设计,开发OpenCV在安卓中的应用林71214配置安卓开发环境,学习安卓中jni的使用方法,开发OpenCV在安卓中的应用一、引言OpenCV的全称是:OpenSourceComputerVisionLibrary。OpenCV是一个基于(开源)发行的跨平台计算机视觉库,可以运行在Linux、Windows和MacOS操作系统上。它轻量级而且高效——由一系列C函数和少量C++类构成,同时提供了Python、Ruby、MATLAB等语言的接口,实现了图像处理和计算机视觉方面的很多通用算法。它的应用领域非常广泛,包括人机互动、物体识别、图像分割、人脸识别、机器视觉、汽车安全驾驶等。随着手机性能的不断提高,OpenCV往安卓上移植已经成为可能,安卓设备移植上OpenCV之后将能够进行复杂的图像处理和视频分析工作,人们不必拘泥于使用固定的设备进行图像以及视频的处理,从而增加了处理的灵活性。本课程设计实现的就是OpenCV到安卓的移植以及在安卓上实现一个简单的图像处理应用。Android应用程序是通过AndroidSDK(SoftwareDevelopmentKit)利用Java编程语言进行开发,同时也可以通过JNI调用C动态库,不过这种开发方式存在技术障碍,伴随着AndroidNDK(NativeDevelopmentKit)的问世,使得“JAVA+C”的开发方式走向成熟。二、总体设计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代码开发环境:三、详细设计1、AndroidNDK开发环境搭建(1)、NDK下载本课程设计使用的NDK版本是android-ndk-r4-crystax,这是一款面向android的编译工具,下载后解压,存放位置自己定义,我放在G盘根目录下。(2)、Cygwin下载由于NDK编译代码时必须要用到make和gcc,所以必须搭建一个Linux环境,下载Cygwin,安装时要注意一下几点:安装目录最好不要放在有中文和空格的目录里;在选择需要下载的包时,由于不清楚各个包的用途,为了避免出错,所以选择了全部下载;由于是从国外站点下载资源,速度稍微有些慢,大约1~2个小时,Cygwin模拟Linux环境AndroidNDK交叉编译工具C程序代码的编辑、编译、生成库文件。Eclipse安卓开发环境Java代码编辑、编译。Eclipse安卓开发环境生成可执行的apk文件。期间应确保网络通畅。安装后在系统环境变量Path中加入cygwin的bin和android-ndk-r4-crystax的路径,检测是否安装成功,打开CygwinTerminal,在命令行输入“cygcheck-ccygwin”,会打印出当前cygwin的版本和运行状态,显示status是“OK”,则表示安装成功,否则需要重新安装。下面需要配置NDK环境变量,配置文件为.bash_profile,我的文件目录是D:\cygwin\home\zhangyu\.bash_profile,在文件末尾添加“NDK=/cygdrive/你的盘符/androidndk目录”,为了区分该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.0encoding=utf-8?LinearLayoutxmlns:android=:tools=:orientation=verticalandroid:layout_width=match_parentandroid:layout_height=match_parentButtonandroid:id=@+id/btn_gray_process!--灰度处理按钮--android:layout_width=fill_parentandroid:layout_height=wrap_contentandroid:text=@string/str_grayproc/Buttonandroid:id=@+id/btn_salt_process!--加入噪点按钮--android:layout_width=fill_parentandroid:layout_height=wrap_contentandroid:text=@string/str_saltproc/Buttonandroid:id=@+id/btn_restore_process!--还原图片按钮--android:layout_width=fill_parentandroid:layout_height=wrap_contentandroid:text=@string/str_restoreproc/ImageViewandroid:id=@+id/image_view!--显示图片控件--android:layout_width=wrap_contentandroid:layout_height=wrap_contentandroid:contentDescription=@string/str_desc//LinearLayoutActivity部分代码如下:publicclassMainActivityextendsActivityimplementsOnClickListener{privateButtongray;//灰度处理按钮privateButtonsalt;//噪点按钮privateButtonrestore;//还原按钮privateImageViewimageView;privateBitmapbmp;@OverridepublicvoidonCreate(BundlesavedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);gray=(Button)findViewById(R.id.btn_gray_process);//变量与xml文件中salt=(Button)findViewById(R.id.btn_salt_process);//的控件进行绑定restore=(Button)findViewById(R.id.btn_restore_process);imageView=(ImageView)findViewById(R.id.image_view);//将lena图像加载程序中并进行显示bmp=BitmapFactory.decodeResource(getResources(),R.drawable.lena);imageView.setImageBitmap(bmp);//为按钮点击事件设置监听器gray.setOnClickListener(this);salt.setOnClickListener(this);restore.setOnClickListener(
本文标题:《嵌入式系统开发技术》设计报告
链接地址:https://www.777doc.com/doc-2844277 .html