opencv4android开发记录(1):opencv开发模板

         初次写博客,介绍一下自己初次使用opencv4android的经历,并将此作为简单模板,方便以后继续学习,不用过多重写界面之类,主要学习opencv处理图像的算法。不用matlab或者c++学习图像处理算法的原因其实很简单,本人奇葩。 

         一、opencv4android下载 

        官网:opencv.org 

        下载:https://opencv.org/releases.html 找到Android Pack,下载,得当压缩包,解压。 

        二、配置 

        官网上讲有如何配置,网上也有很多配置教程。不过本人比较奇葩,没有按照这些方法配置,原因是之前学习安卓开发的方式奇葩。

        先说一下废话,之前学习安卓开发的时候,没有使用Eclipse,也没有Android Studio,也不是用电脑,用的是aide,一个手机app,用于开发android,感兴趣的同学可以百度或谷歌商店下载,需要破解版的去aide吧。 

         言归正传,针对aide的opencv4android没有找到配置教程,自己根据之前的理解配置,完了居然可以完美运行。上面下载的压缩包解压之后有apk,samples和sdk三个文件夹,从命名应该可以看出是什么了。 

         首先,新建一个项目,项目之下有src和bin等文件夹。然后要把opencv的相关文件放到指定位置,程序中才可以调用opencv的函数。那这些函数在哪里呢?回到上面提到的三个解压之后的文件夹,可以猜测应该在sdk下,于是打开这个文件夹,下面有etc,java和native三个文件夹。由于我不用jni开发安卓,此处就先不管native了,但是后面会用到里面的东西。而etc文件夹之下的文件并不懂。此处打开java文件夹,下面的文件夹是不是有点像一个安卓工程的文件夹?打开src文件夹,复制org文件夹到自己工程的src文件夹下,与com文件夹同级。复制gen下的org文件夹复制到自己工程的gen文件夹下。这样,在java调用opencv的时候就不会有问题。但是,生成apk之后,运行会闪退,原因就是上面这些工作相当于加了头文件说明函数,但是函数体没有(此处纯属个人理解,如果错误,还望指正)。于是就想到上面提到的native,打开文件夹,发现一个libs文件,即库文件,将其复制到项目下与src,res等文件夹同级。至此,文件方面配置完成。在用aide测试下可以正常运行,想想其原理,感觉在Eclipse下也应该可行,同样的操作。

         总结一下文件配置,主要复制如下几个文件夹:src下的org,gen下的org,native文件夹下的libs到相应位置即可。 

        三、使用 

扫描二维码关注公众号,回复: 1940618 查看本文章

        环境已经准备好,接下来就开始写代码了。可是没思路呀,于是百度,加上samples文件夹下的代码,大致可以得出,要使用opencv,第一要加载opencv库,同时需要安装一个opencv manager。但是我偏不想安装,因为如果写出一个软件,有人要用,总不可能叫他也装一个吧,很麻烦。于是网上各种找解决方案,最终解决。以下将介绍如何使用。 

        private BaseLoaderCallback mLoaderCallback = new BaseLoaderCallback(this) { 

public void onManagerConnected(int status) { 

switch (status) { 

case LoaderCallbackInterface.SUCCESS: {

  Log.i(TAG, "OpenCV loaded successfully"); 

break; 

default: { 

super.onManagerConnected(status);

  }

  break;

  }

  }

  };

上面是加载opencv会调用的一个回调函数,如果成功就log,不成功就会执行default里面的代码,其实就是打开opencv manager,而我的目的是不打开,当然就想要status success了。在opencv加载的时候,可以看到onResume方法里会这样加载:

 if (!OpenCVLoader.initDebug()) {

  Log.d(TAG, "Internal OpenCV library not found. Using OpenCV Manager for initialization"); 

OpenCVLoader.initAsync(OpenCVLoader.OPENCV_VERSION_3_0_0, this, mLoaderCallback);

} else { 

Log.d(TAG, "OpenCV library found inside package. Using it!"); 

mLoaderCallback.onManagerConnected(LoaderCallbackInterface.SUCCESS);

此处用到了前面的回调函数,如果initDebug失败就要用manager,一般情况下就是直接用manager初始化,而我们之前已经把各种文件都配置好了,就不怕他初始化不正确,因此决定直接改为: 

OpenCVLoader.initDebug(); 

Log.d(TAG, "OpenCV library found inside package. Using it!"); 

mLoaderCallback.onManagerConnected(LoaderCallbackInterface.SUCCESS); 

就是说直接返回成功,自然不用Manager了。至此,再也不用manager了。 接下来写一个简单程序,看一下是否可行吧。使用Imgproc.cvtColor,实现彩色图变灰度图,经本人验证没有问题。 

好了,关于opencv的配置已经讲完,并且可以将彩色图转灰度图程序作为模板。如果对于本文讲解还有不理解的地方,欢迎一起讨论。文中可能存在一些概念或者说法错误,希望大家指出,一起学习。 

最后,提供关于本文的源代码,欢迎大家下载,一起学习,配置还不太清楚的同学可以参考下工程文件结构。

       下载地址:https://github.com/kmin0579/OpenCVTemplate

猜你喜欢

转载自blog.csdn.net/wang_kmin/article/details/78668016