Android(安卓)Studio上使用OpenCV-android-sdk
16lz
2021-01-26
在Android Studio上使用OpenCV:
1、进入OpenCV官网(不用):【https://opencv.org/】:
2、选择RELEASES,可以看见各个版本,根据你的需求下载,这里我选择最新版3.4.0,点击Android pack进入下载页面:
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相关的功能了。
测试:
<?xml version="1.0" encoding="utf-8"?>
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
更多相关文章
- PopupWindow setOutsideTouchable 问题
- 【Android】- 搭建服务器进行前后端的交互
- android图像绘制(六)——获取本地图片或拍照图片
- Android(安卓)TextView实现点击展开动画效果
- android 拍照或者图库选择 压缩后 图片 上传
- Android常用UI之Spinner
- android使用datepicker计算年龄
- Android(安卓)获取系统程序和应用程序
- 安卓如何创建右上角点击菜单