Android平台下的图片处理---OpenCV的使用(1)
OpenCV是什么
百度百科:
OpenCV是一个基于BSD许可(开源)发行的跨平台计算机视觉库,可以运行在Linux、Windows、Android和Mac OS操作系统上。它轻量级而且高效——由一系列 C 函数和少量 C++ 类构成,同时提供了Python、Ruby、MATLAB等语言的接口,实现了图像处理和计算机视觉方面的很多通用算法。
正如提到音视频处理不得不提ffempg 说到图像绘制不等不提openGL一样。在图像处理方面,就不得不提OpenCV了。
选择OpenCV的几个可能的理由:
1.开源 2.跨平台 3.使用范围广 4.轻量高效 5.使用方便
导入工程
导入OpenCV工程 选择Android_SDK 工程
下载页面: OpenCV 版本下载页面
image.png下载解压就行
image.pngAndroidStudio 打开工程
下载NDK和Cmake资源文件 链接好 轻松跑起来
跑起来跑起来
导入的工程文件列表:
image.png点击任意一个工程:
如你所愿,跑起来了 但是没成功
image.png"It seems that you device does not support camera (or it is locked). Application will be closed."
原因很简单,手机版本太高了 相机需要动态申请权限
动态权限申请
申请库
implementation 'com.github.tbruyelle:rxpermissions:0.10.2'
Activity 继承 修改 FdActivity extends FragmentActivity
private RxPermissions rxPermissions;
private String[] permissionList = new String[]{Manifest.permission.CAMERA};
rxPermissions = new RxPermissions(this);
rxPermissions.request(permissionList).subscribe(new Consumer<Boolean>() {
@Override
public void accept(Boolean aBoolean) throws Exception {
}
});
完工 重启工程 一个人脸识别的DEMO
image.png区分使用混合c++源码 和 直接使用so库
使用opencv_java.so文件
我没来看下这个opencv库
image.png分为so库文件和java文件
so是已经封装好的c++方法 对应 java的调用
java代码则是c层代码的调用和封装 便于使用
核心java文件在core
包下:
其他的文件像android包下面的:
基本的加载类 opencv加载类 相机类 等
image.png具体使用还是看文档吧:
最新的还是在 官网 虽然是英文的 翻译翻译还是能看的
除了这种使用方式还有一种直接下载C++源码 通过混合编译的方式调用
这种方式可以获得更加自由的使用,也可以将核心方法放在c++层。
相对于java,使用c层视乎能获得更大的性能提升。如果你对速度要求很高的话,建议自己写c层代码 通过混合编译 调用(NDK)
而且能获得最大的功能支持,当然你需要学习更多关于混合编译的知识。包括 NDK开发 c++代码编写
不过这些代价是值得的。
我这次重点还是OpenCV的使用 所以会直接使用这个opencv 模块作为整个opencv的依赖。至于NDK什么的,有空再有需求的时候再回来说。
写一个测试的DEMO
且看下一篇文章:
文档资料推荐
SDK包的sdk文件夹下面自带了文档:
百度云分享---OpenCV
在opencv-4.0.1-android-sdk\OpenCV-android-sdk\sdk\java\javadoc
路径下面
点开:index.html即可
image.png最新的文档英文资料:官网Opencv 4.0 文档
翻译的中文资料(17年的翻译版本):https://www.w3cschool.cn/opencv/
这个都是2017年了,居然还是用eclipse演示Android项目开发
我的建议是 先看 中文文档 再看 opencv 官网的 更新了什么新的东西