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

  • 目前公司项目的新功能用到图片识别功能,在了解到过程中知道了OpenCV这个神器,因此学习了基础,特地来记录,防止以后忘记。后期将进一步完善其学习记录。更多内容欢迎访问我的个人网站

我用到东西如下:

下载OpenCV4Android

  • 将压缩包解压后可以看到有以下文件,其中使用红线包裹的文件夹是非常重要的文件夹,后面要用到

  • apk 保存的是一些基础包,要根据你的手机芯片的架构安装合适的版本,否则将会提醒你安装,以至于各种错误,所以在之前,还是老老实实安装吧。
  • samples 保存的一些demo,可以根据自己的需要进行学习
  • sdk 我们开发所用的一些工具

注意:我在学习的过程,直接在手机安装会报解析安装包错误,以至于无法安装,那么这里需要连接开发者模式,使用adb进行安装,命令: adb install ****.apk 就可以安装成功了。

创建工程

  • 创建一个普通的安卓工程即可,然后我们需要导入Module

  • 导入Module 这个东西就是上图中的java文件夹,选择File--> new --> import Module 选择步骤一图中红色框框圈起来的JAVA文件夹即可,然后在文件栏中就可以看到这个新的Module了,后面的320指的是版本号,每个人可能不一样

  • 导入Module之后我们需要配置一下,在File--->Project Structure菜单中选择该Moudle作为库依赖即可,如下操作

注意:在某些情况下,再倒入Module的情况下,会出现报错的情况,这是修改Module的编译版本和目标版本和APP的保持一致,然后重新Sync即可.

导入库文件

  • 这里需要导入so库等文件,文件就在步骤一图的用红线圈中的libs文件夹里面,选中里面的所有文件,注意是选中lib里面所有的文件,不是选中libs文件夹。

  • 在项目中,选app工程,在src/main目录下新建jniLibs文件夹,将上面选中的文件全部复制到其中。

  • 为了确保工程创建成功,我们可以重新reBuild一下工程

载入Opencv

  • 我们在Activity的回调函数中异步初始化OpenCV,代码很简单,一句话加上一个回调。
    @Override
protected void onResume() {
super.onResume();
//载入OpenCv初始化引擎,并载入库,可以看到initAsync,使用的是异步加载
//因此需要提供回调函数
//OpenCVLoader.OPENCV_VERSION_3_2_0指的是版本号,请根据你自己的版本选择
OpenCVLoader.initAsync(OpenCVLoader.OPENCV_VERSION_3_2_0, getApplicationContext(), mLoaderCallback);
}
//OpenCV库加载并初始化成功后的回调函数
private BaseLoaderCallback mLoaderCallback = new BaseLoaderCallback(this) {
@Override
public void onManagerConnected(int status) {
// TODO Auto-generated method stub
switch (status) {
case BaseLoaderCallback.SUCCESS:
Log.e("OpenCv", "成功加载");
break;
default:
super.onManagerConnected(status);
Log.e("OpenCv", "加载失败");
break;
}
}
};

使用OpenCV

  • 我们来使用OpenCv做一个简单灰度图
  • 首先是布局文件,就一个简单的图片
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<ImageView
android:id="@+id/img"
android:layout_width="600px"
android:layout_height="1000px"
android:layout_centerHorizontal="true" />
</RelativeLayout>
  • 具体代码如下
        Mat rgbMat = new Mat();
Mat grayMat = new Mat();
//从资源中获取图片
srcBitmap = BitmapFactory.decodeResource(getResources(), R.drawable.psb);
//构建灰度RGB图片
grayBitmap = Bitmap.createBitmap(srcBitmap.getWidth(), srcBitmap.getHeight(), Bitmap.Config.RGB_565);
//将资源图片转化为Mat类资源
Utils.bitmapToMat(srcBitmap, rgbMat);//convert original bitmap to Mat, R G B.
//将图片灰度化
Imgproc.cvtColor(rgbMat, grayMat, Imgproc.COLOR_RGB2GRAY);
//将灰度Mat转换为灰度BitMap资源
Utils.matToBitmap(grayMat, grayBitmap);
//设置显示
((ImageView)findviewById(R.id.img)).setImageBitmap(binaryBitmap);
  • 效果图

当然还有更多的使用方法没有再此详细阐述,可以再网上寻找一些资源,Mat是非常强大的一个类,好好玩吧。

最新文章

  1. 10 Symbol
  2. [译]Modern Core Graphics with Swift系列
  3. 父页面 调用iframe方法
  4. asp.net @reqister指令
  5. Swift学习笔记十五
  6. Android(java)学习笔记123:Clock app编写报错01
  7. HMVC
  8. &lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.01 Transitional//EN&quot;的作用
  9. Android JNI开发提高篇
  10. android 自己定义开关(SwitchButton)
  11. 【Linux】Vim编辑器-批量注释与反注释
  12. html5标签基础
  13. [随笔][Java][总结][java 类型系统]
  14. C#操作DataTable类
  15. 在git多分支repo仓库中彻底清除大文件
  16. Webpack与其他打包工具的区别
  17. octave基本指令2
  18. ubuntu14.04 安装系统/搜狗/QT/qq/wps/CAJviewer
  19. Mysql一个非常有用的内置函数今天碰到要把MySQL数据库中的varchar转换成date类型进
  20. BZOJ4710: [Jsoi2011]分特产【组合数学+容斥】

热门文章

  1. 利用box-shadow属性实现页面层叠效果
  2. Unity3D学习(六):《Unity Shader入门精要》——Unity的基础光照
  3. java读取.properties配置文件的几种方法
  4. MySQL 的性能(下篇)—— 性能优化方法
  5. SSM-SpringMVC-27:SpringMVC类型转换之日期类型初步
  6. 0517JS综合练习、挂事件练习
  7. python 模块与包
  8. Spring Boot工程支持HTTP和HTTPS,HTTP重定向HTTPS
  9. Java 学习笔记 (八) Java 变量
  10. 【cogs 775】山海经 ——Segment Tree