小工具知识网

当前位置: 首页 > 行业知识 > Android Studio中安装使用OpenCV

行业知识

Android Studio中安装使用OpenCV

2026-11-05 10:58:52 来源:互联网转载

参考链接:

(1) https://zhuanlan.zhihu.com/p/666307982

(2) https://forum.opencv.org/t/opencv-4-8-0-cannot-resolve-symbol-opencv-engine-interface/14307/2

以下操作以张思民老师的《Android Studio应用程序设计》第3版中的例9-2为例进行操作。

1. 下载OpenCV Android SDK

(1) 进入OpenCV 官网:https://opencv.org/releases/

(2) 点击下方的Android开始下载

(3) 下载的OpenCV Android SDK为如图所示的压缩包

(4) 解压以上压缩包

2. 搭建开发环境

(1) 新建一个空白项目

(2) 选择菜单File→New→Import Module

(3) 在Import module from source对话框中选择OpenCV-android-sdk解压目录下的sdk

注意:是目录下的sdk而不是课本中sdk/java

(4)稍等,运行项目出现以下报错

Plugin [id: ‘com.android.application’, version: ‘8.1.0’, apply: false] was not found in any of the following sources:

(5)解决以上问题

① 查看以下信息

② 打开opencv/build.gradle

③ 修改方框中的参数与步骤①中参数一致,修改后如下图所示

④ 将apply plugin: ‘kotlin-android’ 注释掉

⑤ 添加namespace “org.opencv”

⑥ 打开项目目录中的settings.gradle和settings.gradle.kts

⑦ 将settings.gradle.kts中的内容复制到settings.gradle

settings.gradle.kts 内容保持不变

settings.gradle 在末尾添加一行include(“:opencv”)

重新编译,报错消失

3. 编写代码

(1) 在res/drawable文件夹下放置一张图片

(2) 将布局文件复制到res/layout/activity_main.xml文件中

            

(3) 将JAVA主程序复制到MainActivity文件中

package com.example.example_9_2;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.core.Point;import org.opencv.core.Size;import org.opencv.imgproc.Imgproc;public class MainActivity extends AppCompatActivity {    ImageView imgView;    Button btn1, btn2;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        imgView = findViewById(R.id.imageView);        btn1 = findViewById(R.id.button);        btn2 = findViewById(R.id.button2);        btn1.setOnClickListener(new mClick1());        btn2.setOnClickListener(new mClick2());        boolean success = OpenCVLoader.initDebug();    }    class mClick1 implements View.OnClickListener {        @Override        public void onClick(View v) {            /*             *  */            Bitmap bitmap = BitmapFactory.decodeResource(MainActivity.this.getResources(), R.drawable.flower2);            //(1)定义3×3模糊卷积核            Mat kernel = new Mat(3, 3, CvType.CV_32FC1);            float[] data = new float[]{0,    1.0f/8.0f,    0,                    1.0f/8.0f,    0.5f,       1.0f/8.0f,                    0,     1.0f/8.0f,    0};            kernel.put(0, 0, data);            //(2)使用上面定义的卷积核实现滤波            Mat src = new Mat();            Mat dst = new Mat();            for( int i=1; i                Utils.bitmapToMat(bitmap, src);                Imgproc.filter2D(src, dst, -1, kernel, new Point(-1, -1), 0.0, Imgproc.CCL_BOLELLI);                //高斯模糊                Imgproc.GaussianBlur(src, dst, new Size(5.0, 5.0), 10.0, 20.0);                Utils.matToBitmap(dst, bitmap);            }            imgView.setImageBitmap(bitmap);            src.release();            dst.release();        }    }    class mClick2 implements View.OnClickListener{        @Override        public void onClick(View v) {            /*  */            Bitmap bitmap = BitmapFactory.decodeResource(MainActivity.this.getResources(), R.drawable.flower2);            //(1)定义锐化算子卷积核            Mat kernel = new Mat(3, 3, CvType.CV_32FC1);            float[] data = new float[]{-1, -1, -1, -1, 9, -1, -1, -1, -1};            // float[] data = new float[]{0, -1, 0, -1, 5, -1, 0, -1, 0};            kernel.put(0, 0, data);            //(2)使用上面定义的卷积核实现滤波            Mat src = new Mat();            Mat dst = new Mat();            for( int i=1; i                Utils.bitmapToMat(bitmap, src);                Imgproc.filter2D(src, dst, -1, kernel, new Point(-1, -1), 0.0, Imgproc.CCL_BOLELLI);                Utils.matToBitmap(dst, bitmap);            }            imgView.setImageBitmap(bitmap);            src.release();            dst.release();        }    }}        aidl = true        buildConfig = true}

上一篇:Ubuntu系统使用Docker搭建Jupyter Notebook并实现无公网ip远程连接

下一篇:揭秘私服发布站源码,探索游戏私服世界的神秘面纱!