您的位置:首页 > 移动开发 > Android开发

Android Studio上使用OpenCV-android-sdk

2018-01-31 10:55 609 查看
在Android Studio上使用OpenCV:

1、进入OpenCV官网(不用翻墙):【https://opencv.org/】:



2、选择RELEASES,可以看见各个版本,根据你的需求下载,这里我选择最新版3.4.0,点击Android pack进入下载页面:







3、下载完成后解压,我们主要用到sdk文件夹:





4、新建一个空项目,然后Android Studio菜单-->File-->New-->Import Module

1)选择刚刚的sdk文件夹下的java文件夹;

2)Module name: Android studio会自动填充这项为openCVLibrary340 ,不用管它;

3)点击下一步,会出现三个复选框,都选上,点击Finish。

5、加入依赖

1)File-->Project Structure;

2)左边Modules栏下选择app;

3)在右边上面一栏中选择Dependencies ;

4)点击右边栏中的“+”,选择第三个Module Dependency;

5)点击ok退出,然后再点击ok退出;

6)点击app,打开app根目录下的build.gradle文件,记下

compileSdkVersion

buildToolsVersion

minSdkVersion

targetSdkVersion

然后点击openCVLibrary340,打开根目录下的build.gradle文件,把文件中

compileSdkVersion

buildToolsVersion

minSdkVersion

targetSdkVersion

后的数值改成app中一样的。

6、在app/src/main下新建文件夹jniLibs,将我们下载的OpenCV-android-sdk的sdk/native/libs下的所有文件拷贝到jniLibs下。

至此我们已经可以使用Opencv相关的功能了。

测试:





activity_main.xml:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/activity_main"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.example.opencvdemo.MainActivity"
android:orientation="vertical"
>
<Button
android:id="@+id/select_btn"
android:text="选择图片"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>
<Button
android:id="@+id/process_btn"
android:text="处理"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>
<ImageView
android:id="@+id/imageView"
android:src="@mipmap/ic_launcher"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>
</LinearLayout>
MainActivity.java:
package com.example.opencvdemo;

import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.net.Uri;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;

import org.opencv.android.OpenCVLoader;
import org.opencv.android.Utils;
import org.opencv.core.CvType;
import org.opencv.core.Mat;
import org.opencv.imgproc.Imgproc;

import java.io.InputStream;

public class MainActivity extends AppCompatActivity {

private double max_size = 1024;
private int PICK_IMAGE_REQUEST = 1;
private ImageView myImageView;
private Bitmap selectbp;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
staticLoadCVLibraries();
myImageView = (ImageView)findViewById(R.id.imageView);
myImageView.setScaleType(ImageView.ScaleType.FIT_CENTER);
Button selectImageBtn = (Button)findViewById(R.id.select_btn);
selectImageBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// makeText(MainActivity.this.getApplicationContext(), "start to browser image", Toast.LENGTH_SHORT).show();
selectImage();
}
});

Button processBtn = (Button)findViewById(R.id.process_btn);
processBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// makeText(MainActivity.this.getApplicationContext(), "hello, image process", Toast.LENGTH_SHORT).show();
convertGray();
}
});

}

//OpenCV库静态加载并初始化
private void staticLoadCVLibraries(){
boolean load = OpenCVLoader.initDebug();
if(load) {
Log.i("CV", "Open CV Libraries loaded...");
}
}

private void convertGray() {
Mat src = new Mat();
Mat temp = new Mat();
Mat dst = new Mat();
Utils.bitmapToMat(selectbp, src);
Imgproc.cvtColor(src, temp, Imgproc.COLOR_BGRA2BGR);
Log.i("CV", "image type:" + (temp.type() == CvType.CV_8UC3));
Imgproc.cvtColor(temp, dst, Imgproc.COLOR_BGR2GRAY);
Utils.matToBitmap(dst, selectbp);
myImageView.setImageBitmap(selectbp);
}

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if(requestCode == PICK_IMAGE_REQUEST && resultCode == RESULT_OK && data != null && data.getData() != null) {
Uri uri = data.getData();
try {
Log.d("image-tag", "start to decode selected image now...");
InputStream input = getContentResolver().openInputStream(uri);
BitmapFactory.Options options = new BitmapFactory.Options();
options.inJustDecodeBounds = true;
BitmapFactory.decodeStream(input, null, options);
int raw_width = options.outWidth;
int raw_height = options.outHeight;
int max = Math.max(raw_width, raw_height);
int newWidth = raw_width;
int newHeight = raw_height;
int inSampleSize = 1;
if(max > max_size) {
newWidth = raw_width / 2;
newHeight = raw_height / 2;
while((newWidth/inSampleSize) > max_size || (newHeight/inSampleSize) > max_size) {
inSampleSize *=2;
}
}

options.inSampleSize = inSampleSize;
options.inJustDecodeBounds = false;
options.inPreferredConfig = Bitmap.Config.ARGB_8888;
selectbp = BitmapFactory.decodeStream(getContentResolver().openInputStream(uri), null, options);

myImageView.setImageBitmap(selectbp);

} catch (Exception e) {
e.printStackTrace();
}
}
}

private void selectImage() {
Intent intent = new Intent();
intent.setType("image/*");
intent.setAction(Intent.ACTION_GET_CONTENT);
startActivityForResult(Intent.createChooser(intent,"选择图像..."), PICK_IMAGE_REQUEST);
}
}


参考:【Android Studio不安装opencv manager配置】https://jingyan.baidu.com/article/60ccbceb53533364cab197db.html

【在Android Studio 2.2上集成OpenCV4Android SDK】
http://blog.csdn.net/PZ0605/article/details/72778547

【GitHub上的项目:目标检测&目标追踪&人脸检测&人脸识别】https://github.com/kongqw/OpenCVForAndroid
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: