Android导入OpenCV配置使用 1.下载OpenCV-android-sdk 官网下载sdk,打开opencv官网,点击Android,完成后解压 https://opencv.org/ 解
官网下载sdk,打开opencv官网,点击Android,完成后解压
https://opencv.org/
解压后,文件夹下有这些文件
打开Android studio,选择模板,这时选择最后一项Native c++,然后进入配置界面。
apply plugin: 'com.android.library
,并将API改为与app一致sourceSets { main{ jni.srcDirs = ['src/main/jniLibs'] } }
在externalNativeBuild下添加以下代码
externalNativeBuild { cmake { cppFlags '-std=c++14 -frtti -fexceptions' abiFilters 'armeabi-v7a', 'arm64-v8a', 'x86', 'x86_64' arguments '-DANDROID_STL=c++_shared' } }
这时环境就算配置好了,接下来用一个简单的灰度化来验证一下
package com.example.myandroidopencv;import androidx.annotation.NonNull;import androidx.annotation.Nullable;import androidx.appcompat.app.AppCompatActivity;import android.content.ContentResolver;import android.content.Intent;import android.graphics.Bitmap;import android.graphics.BitmapFactory;import android.net.Uri;import android.os.Bundle;import android.os.Handler;import android.os.Message;import android.util.Log;import android.view.View;import android.widget.Button;import android.widget.ImageView;import android.widget.TextView;import com.example.myandroidopencv.databinding.ActivityMainBinding;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.File;import java.io.FileNotFoundException;public class MainActivity extends AppCompatActivity implements View.OnClickListener { private ImageView img; private Button btn_load, btn_gray; private Bitmap bitmap; // Used to load the 'myandroidopencv' library on application startup. static { System.loadLibrary("myandroidopencv"); } private ActivityMainBinding binding; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); binding = ActivityMainBinding.inflate(getLayoutInflater()); setContentView(binding.getRoot()); img = findViewById(R.id.img); btn_load = findViewById(R.id.btn_load); btn_gray = findViewById(R.id.btn_gray); btn_load.setOnClickListener(this); btn_gray.setOnClickListener(this); } public native String stringFromJNI(); @Override public void onClick(View view) { switch (view.getId()){ case R.id.btn_load: loadImg(); break; case R.id.btn_gray: doChgGray(); break; } } private void loadImg(){ Intent intent = new Intent(); intent.setType("image/*"); intent.setAction(Intent.ACTION_GET_CONTENT); startActivityForResult(intent,1); } private void doChgGray(){ if (bitmap==null){ return; } Bitmap bit = bitmap.copy(Bitmap.Config.ARGB_8888,false); Mat src = new Mat(bit.getHeight(), bit.getWidth(), CvType.CV_8UC(3)); Utils.bitmapToMat(bit,src); Imgproc.cvtColor(src,src,Imgproc.COLOR_BGR2GRAY); Utils.matToBitmap(src,bitmap); Message message = new Message(); message.what = 1; handler.sendMessage(message); } @Override protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) { //用户操作完成,结果返回码是-1 if (resultCode==RESULT_OK){ Uri uri = data.getData(); Log.e("uri",uri.toString()); ContentResolver cr = this.getContentResolver(); try { bitmap = BitmapFactory.decodeStream(cr.openInputStream(uri)); img.setImageBitmap(bitmap); }catch(FileNotFoundException ex){ Log.e("Exception",ex.getMessage(),ex); } }else{ //操作错误,或没有选择图片 Log.i("MainActivity", "操作错误"); } super.onActivityResult(requestCode, resultCode, data); } @Override protected void onResume() { super.onResume(); if (!OpenCVLoader.initDebug()){ Log.i("cv","未找到内部的opencv库,使用OpenCV Manager进行初始化"); }else { Log.i("cv","发现了内置的opencv库,使用它来进行操作"); } } Handler handler = new Handler(){ @Override public void handleMessage(@NonNull Message msg) { super.handleMessage(msg); switch (msg.what){ case 1: img.setImageBitmap(bitmap); break; } } };}
来源地址:https://blog.csdn.net/weixin_45178274/article/details/129491697
--结束END--
本文标题: 学习笔记—Android studio导入OpenCV配置使用
本文链接: http://www.lsjlt.com/news/389278.html(转载时请注明来源链接)
有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341
下载Word文档到电脑,方便收藏和打印~
2024-01-21
2023-10-28
2023-10-28
2023-10-27
2023-10-27
2023-10-27
2023-10-27
回答
回答
回答
回答
回答
回答
回答
回答
回答
回答
0