Android Studio集成OpenCV,全网最保姆级教程

一、Android Studio引入OpenCV

        1、创建一个新工程 File→New Project→Empty Activity,然后Finish进行创建

创建工程

 2、检验工程是否能正常运行,如果正常运行,则跳过此步

 

 

3、 下载NDK,集成OpenCV需要用到

 4、引入openCv,File→New→Import Module,选择你下载解压之后的OpenCV-android-sdk\sdk(注意解压的文件夹,不要有中文,不要放的太深,避免导入模块出错),然后Finish,此处使用的是opencv-4.5.2-android-sdk,需要的可自取。

链接: https://pan.baidu.com/s/1VufrqPXOzviEy63nZ6pNqQ 提取码: ancv

5、配置引入的OpenCV的配置文件

同步完成后,有报错不用理会,关闭即可

6、把引入的OpenCV包添加到app项目里,打开导包界面,File→Project Struture,然后按照下面的步骤导包,最后apply即可

 7、添加OpenCV的.so动态链接库文件。在你解压的OpenCV文件中,进入到OpenCV-android-sdk\sdk\native\libs文件夹下

8、在app的gradle配置文件中,加入如下的声明,定义引入的OpenCV的.so动态链接库文件,然后sync now,同步一下

9、最后,启动项目看配置是否成功,如若成功,则有如下提示

二、实例演示

1、代码实现,activity_main.xml代码

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical">
    <Button
        android:id="@+id/button"
        android:text="灰度化"
        android:layout_width="match_parent"
        android:layout_height="wrap_content">
    </Button>
    <ImageView
        android:id="@+id/image"
        android:layout_width="match_parent"
        android:layout_height="wrap_content">
    </ImageView>
</LinearLayout>

2、activity_main.java代码



import androidx.appcompat.app.AppCompatActivity;

import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.Bundle;
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;

public class MainActivity extends AppCompatActivity {

    private Button garyButton; // 灰度化启动按钮
    private Bitmap oriBitmap, garyBitmap; // oriBitmap:原图;garyBitmap:灰度化图
    private ImageView imageView;// 图片组件
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        // 导入视图文件
        imageView = findViewById(R.id.image);
        oriBitmap = BitmapFactory.decodeResource(this.getResources(), R.drawable.yaya);
        imageView.setImageBitmap(oriBitmap);
        // 按钮监听事件
        garyButton = findViewById(R.id.button);
        garyButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                // 实现图片灰度化
                garyImage(oriBitmap);
            }
        });
    }

    /**
     * 实现图片灰度化
     *
     * @param bitmap 位图
     */
    protected void garyImage(Bitmap bitmap) {
        Mat mat = new Mat(bitmap.getHeight(), bitmap.getWidth(), CvType.CV_8UC3);
        Utils.bitmapToMat(bitmap, mat);
        garyBitmap = Bitmap.createBitmap(mat.width(), mat.height(), Bitmap.Config.ARGB_8888);
        Imgproc.cvtColor(mat, mat, Imgproc.COLOR_BGR2GRAY);
        Utils.matToBitmap(mat, garyBitmap);
        imageView.setImageBitmap(garyBitmap);
    }

    protected void onResume() {
        super.onResume();
        if (!OpenCVLoader.initDebug()) {
            Log.d("openCv", "openCv加载失败...");
        }else {
            Log.d("openCv", "openCv加载成功...");
        }
    }
}

3、实现效果

原图
原图
转换之后图片

 

三、 总结:

        翻阅了大量资料,耗费了很多时间才自我集成成功,故有感而发,希望本博文能帮助想要使用android studio集成OpenCV的朋友,减少集成的时间。如博文哪里有问题,希望各位大佬斧正。

  • 7
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值