这里默认你已经成功安装了Android Studio IDE;我这里使用的AS版本是3.0.1;截止目前,AS稳定版本已经升级至3.2.1,至于版本间的区别,这里不多做区分和说明。如果对于AS的下载和安装有问题也可以参加我的关于AS介绍的博客。下面就来看看如何搭建OpenCV的开发环境。
1,环境搭建
第一步:下载SDK
点击下图中的红色方框中SDK,也即最新发布的openCV3.4.4
第二步:解压与分析
下载完成解压之后的目录如下:
其中:
- apk文件夹中存储的是对应不同cpu的代理(manager)应用
- samples中存储的是官方给出Demo源码示例,但是遗憾的是这里都是Eclipse项目
- sdk中存储的就是我们接下来搭建环境需要使用的一些材料
下面就来简单看一下sdk中究竟有什么东西:
- etc中存放的是训练好的级联分类器数据(HAAR和LBP)
- java中存放的是我们接下来使用的Android SDK
- native中存放基于c/c++编译好的本地库文件,JNI层开发需要的头文件和CMake文件
第三步:导入SDK
(1)创建一个新的工程,点击“File”-->"New"-->"Import Module",然后选择上图中的java文件夹点击OK“”即可;待工程构建完成之后,项目结构如下图所示:
(2)把native文件夹中libs目录下面的所以文件copy到我们项目的libs目录中
(3)到目前为止,我们的工作也快结束了,但是还需要修改一下gradle文件
- 在上图中的build.gradle(Module:app)中最外层添加如下代码:
task nativeLibsToJar(type: Jar, description: 'create a jar archive of the native libs') {
destinationDir file("$buildDir/native-libs")
baseName 'native-libs'
from fileTree(dir: 'libs', include: '**/*.so')
into 'lib/'
}
tasks.withType(JavaCompile) {
compileTask -> compileTask.dependsOn(nativeLibsToJar)
}
- 在我们导入上面Module的时候,上一步的gradle文件还会添加如下依赖(自动添加):
implementation project(':openCVLibrary344')
- 此外,我们还需要在依赖中加载libs目录的文件
implementation fileTree(include: ['*.jar'], dir: 'libs')
implementation fileTree(dir: "$buildDir/native-libs", include: 'native-libs.jar')
implementation fileTree(dir: 'libs', include: ['*.jar'])
这样,整个环境就算搭建完成了,到后面NDK相关开发的时候,还会去介绍相关的环境搭建,这里就先不多说了,还是来看看一下环境是否搭建成功了吧。
2,校验
还是使用一个别人举的例子也是一个很简单的API调用--图片的灰度化;先看一下效果示意图:
布局activity_test.xml代码:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context="com.hfut.operationopencvmain.TestActivity">
<LinearLayout
android:gravity="center_horizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<ImageView
android:id="@+id/test_image"
android:layout_width="400dp"
android:layout_height="400dp" />
</LinearLayout>
<Button
android:layout_marginTop="10dp"
android:text="灰度图片"
android:onClick="grayImage"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
</LinearLayout>
TestActivity.java代码:
package com.hfut.operationopencvmain;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.ImageView;
import org.opencv.android.OpenCVLoader;
import org.opencv.android.Utils;
import org.opencv.core.Mat;
import org.opencv.imgproc.Imgproc;
/**
* @author why
* @date 2018-11-26 23:00:06
*/
public class TestActivity extends AppCompatActivity {
private ImageView imageView;
private static final String TAG = "TestActivity";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_test);
boolean status = OpenCVLoader.initDebug();
if (status) {
Log.e(TAG, "onCreate: Succese");
} else {
Log.e(TAG, "onCreate: Failed");
}
imageView = findViewById(R.id.test_image);
imageView.setImageDrawable(getResources().getDrawable(R.drawable.test));
}
public void grayImage(View view) {
Mat src = new Mat();
Mat dst = new Mat();
Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.test);
Utils.bitmapToMat(bitmap, src);
Imgproc.cvtColor(src, dst, Imgproc.COLOR_BGR2GRAY);
Utils.matToBitmap(dst, bitmap);
imageView.setImageBitmap(bitmap);
//如果不用,直接释放资源
//src.release();
//dst.release();
}
}
好了,到这里就基本介绍完了,整个的环境搭建还是很简单的;但是如果你尝试着把下载下来的samples里面的Eclipse项目移植到AS中并且能成功的在设备上运行起来还是要费一点功夫的,这个在后面会介绍其中的一些坑。
注:欢迎扫码关注