Android OpenCV库使用

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

文字识别用的是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将彩图转换成灰度图

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值