今天因为课题的关系需要在安卓上安装openCVC环境,但是参考网上很多教程都不够齐全,下面主要参考了一下两个教程进行配置,两个教程各有互补,然后对我的整个安装过程做个说明
这篇文章完全参考自一下参考链接:
比较全的安装:http://blog.csdn.net/pwh0996/article/details/8957764/
NDK安装:http://jingyan.baidu.com/article/5d6edee22d908799eadeec9f.html
如果在安装过程中有什么问题可以留言,也可以直接看上述博客
准备工具:
操作系统:window7 64位
Java版本:java8 64位
eclipse:eclipse for J2ee
android SDK
Android NDK r8
opencv for android 3.0.0
一,Java以及Android环境搭建
Java步骤:
1,安装JAVA JDK 我是装的Java 8当然Java7也是可以的
2,配置环境变量:
设置 JAVA_HOME 为JDK的安装目录 如我的目录是 D:\Program Files\Java\jdk1.8.0_65
在环境变量path中加入 %JAVA_HOME%\bin 注意需要在前面加上分号
Java7及其以上的不要配置classpath,也可以配置classpath为点号 . (点号表示当前目录)
3,在cmd中输入 javac-version如果配置成功则会出现你的JDK版本信息
二, Android环境搭建(我是基于eclipse+ADT+AndroidSDK搭建的)
1,安装android SDK
在Android Developers下载android-sdk_r05-windows.zip,下载完成后解压到任意路径。
- 运行SDK Setup.exe,点击Available Packages。如果没有出现可安装的包,请点击Settings,选中Misc中的"Force https://..."这项,再点击Available Packages 。
- 选择希望安装的SDK及其文档或者其它包,点击Installation Selected、Accept All、Install Accepted,开始下载安装所选包
- 在用户变量中新建PATH值为:Android SDK中的tools绝对路径(本机为D:\AndroidDevelop\android-sdk-windows\tools)。
-
- 在cmd中输入 andriod -h检测是否安装成功,成功会有android安装信息显示
2,安装ADT插件
我是使用ADT在线安装,比较方便,具体方法是 在eclipse中依次打开:
Help->Install new software
然后在work with框的右侧点击 ADD,如下图配置
点击确认之后会出现
注意不要勾选update all 那一项,否则会在安装过程中卡很久,接下来就下一步下一步就行了,安装完成中后重新打开eclipse即可
3,完成之后:
- 选择Window > Preferences...
- 在左边的面板选择Android,然后在右侧点击Browse...并选中SDK路径,本机为:
D:\AndroidDevelop\android-sdk-windows - 点击Apply、OK。配置完成
4,创建android avd 虚拟机,这个比较简单,可自行百度
三,NDK环境搭建
最新的NDK(r7及其以上)已经内置了cygwin,也不用去装CDT,会非常方便,具体步骤如下:
1,下载NDK 下载链接为:http://developer.android.com/tools/sdk/ndk/index.html
2,打开Eclipse,点Window->Preferences->Android->NDK,设置NDK路径,例如我的是的是D:\Android\AndroidEnvir\android-ndk-r8
四,android openCV环境搭建
这一段参考自 http://blog.csdn.net/pwh0996/article/details/8957764/
1,进入官网(http://opencv.org/)下载OpenCV4Android并解压,其目录结构如下:
其中,sdk目录即是我们开发opencv所需要的类库;samples目录中存放着若干opencv应用示例(包括人脸检测等),可为我们进行android下的opencv开发提供参考;doc目录为opencv类库的使用说明及api文档等;而apk目录则存放着对应于各内核 版本的OpenCV_2.4.3.2_Manager_2.4应用安装包。此应用用来管理手机设备中的opencv类库,在运行opencv应用之前,必须确保手机中已经安装了OpenCV_2.4.3.2_Manager_2.4_*.apk,如何安装apk到虚拟机见(http://jingyan.baidu.com/album/19020a0a253302529d284213.html?picindex=1,需要说明的是有时候会出现那个Open CV was not initialed correctly,在那个apk包中多试几个apk就行了)否则opencv应用将会因为无法加载opencv类库而无法运行。
2,将SDK引入到工作空间
和传统的eclipse引入工程一样,将opeCV目录下的sdk项目引入到eclipse工作空间中。具体是:file->import->existing project into workspace然后选择openCVC的那个sdk项目
注意:有时候这个引入的项目会因为android版本不一致导致错误,具体表现是代码中引入的android包全报错,解决的方法是 项目->右击->properties->android 然后勾选相应的版本即可
3使用Java API开发android程序
创建工程
(1) 打开eclipse,创建android应用工程GrayProcess;
(2) 将测试图像lss.jpg(图片自选)添加到资源目录res/drawable-hdpi中;
(3) 在Package Explorer中选择项目GrayProcess,单击右键在弹出菜单中选择Properties,然后在弹出的Properties窗口中左侧选择Android,然后点击右下方的Add按钮,选择OpenCV Library 3.0.0并点击OK,操作完成后,会将OpenCV类库添加到GrayProcess的Android Dependencies中,如下图所示:
项目代码:
布局文件:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent" > <Button android:id="@+id/btn_gray_process" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="@string/str_proc"/> <ImageView android:id="@+id/image_view" android:layout_width="wrap_content" android:layout_height="wrap_content" android:contentDescription="@string/str_proc"/> </LinearLayout>
String.xml文件
<?xml version="1.0" encoding="utf-8"?> <resources> <string name="app_name">GrayPorcess</string> <string name="hello_world">Hello world!</string> <string name="action_settings">Settings</string> <string name="title_activity_main">MainActivity</string> <string name="str_proc">gray process</string> <string name="str_desc">image description</string> </resources>
MainActivity.java文件
package com.luchi.grayporcess;
import org.opencv.android.BaseLoaderCallback;
import org.opencv.android.LoaderCallbackInterface;
import org.opencv.android.OpenCVLoader;
import org.opencv.android.Utils;
import org.opencv.core.Mat;
import org.opencv.imgproc.Imgproc;
import android.os.Bundle;
import android.app.Activity;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Bitmap.Config;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.ImageView;
public class MainActivity extends Activity implements OnClickListener{
private Button btnProc;
private ImageView imageView;
private Bitmap bmp;
//OpenCV类库加载并初始化成功后的回调函数,在此我们不进行任何操作
private BaseLoaderCallback mLoaderCallback = new BaseLoaderCallback(this) {
@Override
public void onManagerConnected(int status) {
switch (status) {
case LoaderCallbackInterface.SUCCESS:{
} break;
default:{
super.onManagerConnected(status);
} break;
}
}
};
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btnProc = (Button) findViewById(R.id.btn_gray_process);
imageView = (ImageView) findViewById(R.id.image_view);
//将lena图像加载程序中并进行显示
bmp = BitmapFactory.decodeResource(getResources(), R.drawable.lss);
imageView.setImageBitmap(bmp);
btnProc.setOnClickListener(this);
}
@Override
public void onClick(View v) {
Mat rgbMat = new Mat();
Mat grayMat = new Mat();
//获取lena彩色图像所对应的像素数据
Utils.bitmapToMat(bmp, rgbMat);
//将彩色图像数据转换为灰度图像数据并存储到grayMat中
Imgproc.cvtColor(rgbMat, grayMat, Imgproc.COLOR_RGB2GRAY);
//创建一个灰度图像
Bitmap grayBmp = Bitmap.createBitmap(bmp.getWidth(), bmp.getHeight(), Config.RGB_565);
//将矩阵grayMat转换为灰度图像
Utils.matToBitmap(grayMat, grayBmp);
imageView.setImageBitmap(grayBmp);
}
@Override
public void onResume(){
super.onResume();
//通过OpenCV引擎服务加载并初始化OpenCV类库,所谓OpenCV引擎服务即是
//OpenCV_2.4.3.2_Manager_2.4_*.apk程序包,存在于OpenCV安装包的apk目录中
OpenCVLoader.initAsync(OpenCVLoader.OPENCV_VERSION_2_4_3, this, mLoaderCallback);
}
}
运行结果:
至此就完成了android openCV环境的搭建