Android OpenCV库使用

本文介绍了如何在Android Studio中集成OpenCV库,并通过一个灰度化图像的例子展示了其使用方法。OpenCV是一个开源计算机视觉库,支持多种操作系统。文章详细说明了配置过程,包括下载SDK、添加依赖、修改配置、添加库文件等步骤。

最近在做一个文字识别的工具,主要是想从图片中提取出对我有用的信息。

文字识别用的是Tesseract的文字识别库,写了一个demo,发现识别的速度很慢,于是想是不是要对原图做些处理呢?!

于是乎,找到了这个博文:Android中的文字识别(论文精简版),里面提到需要对原图片做基本的处理:

对于图片的处理,使用的OpenCV库。所以在此记录一下在Android中怎么使用OpenCV库。

OpenCV库简介

OpenCV是一个基于BSD许可(开源)发行的跨平台计算机视觉库,可以运行在Linux、Windows和Mac OS操作系统上。它轻量级而且高效——由一系列 C 函数和少量 C++ 类构成,同时提供了Python、Ruby、MATLAB等语言的接口,实现了图像处理和计算机视觉方面的很多通用算法。

Android集成OpenCV库

我这边是在Android Studio上集成的,而且Android Studio已经集成好NDK了。

(1)下载OpenCV库的SDK

地址:http://opencv.org/releases.html

解压之后,应该是这样的:

进入sdk文件夹,如图:

(2)项目添加依赖module

选择sdk/java文件夹

并把app模块依赖openCVLibrary341模块:

(3)修改配置

比如我们app模块的build.gradle如下:

需要把红色框里面的内容复制到openCVLibrary341模块的build.gradle中,

(4)添加库文件

把OpenCV库文件添加到项目中:

复制到项目中的lib文件夹中:

(5)最后调整

还要在app模块的build.gradle添加以下配置:

方便拷贝:

dependencies里面:

compile fileTree(dir: "$buildDir/native-libs",include: 'native-libs.jar')

task:

task nativeLibsToJar(type: Jar,description:'create a jar archive of the native libs'){
    destinationDir file("$buildDir/native-libs")
    baseName 'native-libs'
    from fileTree(dir: 'libs',include: '**/*.so')
    into 'lib/'
}
tasks.withType(JavaCompile){
    compileTask -> compileTask.dependsOn(nativeLibsToJar)
}

大概以上5个步骤就可以配好了!

OpenCV库使用实例

集成完OpenCV库之后,我们来尝试使用一下。

public class MainActivity extends AppCompatActivity {

    private static final String TAG = "MainActivity";
    private Button btn;
    private Mat imageMat;
    private ImageView imageView;

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        imageView = (ImageView) findViewById(R.id.img);
        imageView.setImageResource(R.drawable.hahah);
        btn = (Button) findViewById(R.id.btn);

        btn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                 // 图像灰度化
                 Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.hahah);
                 Mat mat_src = new Mat(bitmap.getWidth(), bitmap.getHeight(), CvType.CV_8UC4);
                 Utils.bitmapToMat(bitmap, mat_src);
                 Mat mat_gray = new Mat(bitmap.getWidth(), bitmap.getHeight(), CvType.CV_8UC1);
                 Imgproc.cvtColor(mat_src, mat_gray, Imgproc.COLOR_BGRA2GRAY, 1);
                 final Bitmap bmp_dst = Bitmap.createBitmap(mat_gray.cols(), mat_gray.rows(), Bitmap.Config.ARGB_8888);
                 Utils.matToBitmap(mat_gray, bmp_dst);
                 imageView.setImageBitmap(bmp_dst);
            }
        });

    }

    @Override
    protected void onResume() {
        super.onResume();
        // 加载并初始化OpenCV类库
        if (!OpenCVLoader.initDebug()) {
            Log.d("OpenCV", "Internal OpenCV library not found. Using OpenCV Manager for initialization");
            OpenCVLoader.initAsync(OpenCVLoader.OPENCV_VERSION_2_4_10, this, mLoaderCallback);
        } else {
            Log.d("OpenCV", "OpenCV library found inside package. Using it!");
            mLoaderCallback.onManagerConnected(LoaderCallbackInterface.SUCCESS);
        }
    }

    /**
     * 加载回调
     */
    private BaseLoaderCallback mLoaderCallback = new BaseLoaderCallback(this) {
        @Override
        public void onManagerConnected(int status) {
            switch (status) {
                case LoaderCallbackInterface.SUCCESS: 
                    Log.i(TAG, "OpenCV loaded successfully");
                    imageMat=new Mat();
                    break;
                default:
                    super.onManagerConnected(status);
                    break;
            }
        }
    };

}

使用起来其实还挺简单的!!

原图:

灰度化图:

终于体验到这个库的强大了!!聊聊几行代码,便可实现灰度化,太强了!!

参考

OpenCv for Android 环境搭建
Android Studio中使用OpenCV将彩图转换成灰度图

要下载适用于 AndroidOpenCV ,可以根据不同版本和需求选择合适的下载链接和方式。以下是一些常见的下载选项和说明: ### 下载 OpenCV Android SDK 的推荐方式 1. **OpenCV 3.4.3 版本** 这是一个较为稳定且被广泛使用的版本,适用于 Android 平台的 SDK 文件为 `opencv-3.4.3-android-sdk.zip`。 直接下载地址: [https://jaist.dl.sourceforge.net/project/opencvlibrary/opencv-android/3.4.3/opencv-3.4.3-android-sdk.zip](https://jaist.dl.sourceforge.net/project/opencvlibrary/opencv-android/3.4.3/opencv-3.4.3-android-sdk.zip) [^2] 2. **OpenCV 4.5.0 版本** 如果需要更新的版本,可以下载 OpenCV 4.5.0 的 Android SDK,文件名为 `opencv-4.5.0-android-sdk.zip`。 下载地址: [https://sourceforge.net/projects/opencvlibrary/files/4.5.0/opencv-4.5.0-android-sdk.zip/download](https://sourceforge.net/projects/opencvlibrary/files/4.5.0/opencv-4.5.0-android-sdk.zip/download) [^1] ### 免安装 OpenCV Manager 的注意事项 在某些免安装 OpenCV Manager 的实现中,可能会遇到以下问题: - 应用提示需要安装 OpenCV Manager APK - 日志中提示 `OpenCV error: Cannot load info library for OpenCV` 这是由于新版 OpenCV SDK 中缺少一个名为 `opencv_info` 的文件。为了解决该问题,可以从旧版 SDK 中获取该文件,并将其添加到项目目录中。 下载地址(优快云 资源): [https://download.csdn.net/download/wawayuchibang/10782701](https://download.csdn.net/download/wawayuchibang/10782701) [^3] ### Android Studio 集成建议 在 Android Studio 中集成 OpenCV SDK 时,可以通过以下步骤导入模块: 1. 打开 Android Studio 2. 点击 `File` -> `New` -> `Import Module` 3. 选择解压后的 OpenCV SDK 目录中的 `sdk/java` 文件夹 [^4] ### 示例:OpenCV 文件导入代码(`build.gradle` 配置) ```gradle dependencies { implementation project(':opencv') } ``` 将 OpenCV 模块作为项目导入后,可在应用中通过以下方式加载 OpenCV : ```java if (!OpenCVLoader.initDebug()) { Log.e("OpenCV", "Initialization Failed"); } else { Log.d("OpenCV", "OpenCV Initialized Successfully"); } ``` ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值