android 使用opencv4 图片相似度对比
最近项目中需要做到图片相似度对比,搜了半天,网上有很多直接方法,但是感觉没那么靠谱,都是有弊端,eg:https://blog.csdn.net/hnulwt/article/details/43668161
https://blog.csdn.net/u010652002/article/details/72722198
上面的方法都很有价值。
觉的最靠谱的方法有两种:
一种是使用tess-two,训练自己的图片,然后做识别,但是中间遇到了写问题就没有用。
有想试试的可以访问https://blog.csdn.net/u013087553/article/details/94445109
另一种是使用openCV,里面有Imgproc.compareHist这个方法可以比较图片相似度,倒是很方便。
下面我就讲讲关于使用openCV的坑(找了半天文章,各种问题出现):
一、集成OpenCV
1.到openCV官网下载android版,我下的是最新的4.1.1。
下载完后有四个文件:
2.
导入java文件;进入file-new-import module,source directory中填入之前介绍的sdk包中的java文件,如下图所示,填好之后,会自动填入java(可以自己改名字),(如下图所示)然后点击next。
然后出现下图,直接点击finish:
然后opencv就被导入项目了,样子如下图。
然后咱们引用一下File --- Project Structure ---- app ----Dependencies,点击“+”号,选择第三个module dependcy,把java引入:
但是会报错,别着急,一项一项解决:
1.将java的build.gradle打开,修改compileSdkVersion和buildToolsVersion改成跟app里面的一致。
2.将apply plugin: 'com.android.application' 改为apply plugin: 'com.android.library'。
3.将defaultConfig删除。
4.将app的build.gradle中applicationId这句话也删掉。
现在就不会报错了。
3.在app/src/main目录下新建个jinLibs的文件夹,将sdk下native下的libs复制进来:
到这我以为可以使用了,在mainActivity初始化一下:
@Overrideprotected void onResume() {super.onResume();if(!OpenCVLoader.initDebug()){Log.d(getClass().getName(),"Internal OpenCV library not found. Using OpenCV manger for initialization");OpenCVLoader.initAsync(OpenCVLoader.OPENCV_VERSION_3_0_0, this, mLoaderCallback);}else{Log.d(getClass().getName(),"OpenCV library found inside package. Using it!");mLoaderCallback.onManagerConnected(LoaderCallbackInterface.SUCCESS);}}private BaseLoaderCallback mLoaderCallback = new BaseLoaderCallback(this) {@Overridepublic void onManagerConnected(int status) {switch (status) {case LoaderCallbackInterface.SUCCESS: {Log.i("rr", "OpenCV loaded successfully");}break;default: {super.onManagerConnected(status);}break;}}};
然后运行一下,网上都是说这样就不需要安装manager,但是我运行以后还是让安装:
我看了一下日志,如下:
上面显示"info"和"libc++"没有找到,点进去我看了一下,"info"不需要管,它里面try,catch了。我们需要解决一下"lib++"这个问题,我试了半天都没用,在defaultConfig添加了 ndk {//设置支持的SO库架构abiFilters 'x86', 'armeabi-v7a', 'x86_64', 'arm64-v8a'}这句话也没用,我就去掉了,但是从别人的项目拷了so文件就好了,如果你也不行到时候从我项目拷so文件就行。
因为我要做的是图片相似度对比,接下来的就是图片相似度对比的代码:
主要代码:
@Overridepublic void onClick(View v) {Mat mat1 = new Mat();Mat mat2 = new Mat();Mat mat11 = new Mat();Mat mat22 = new Mat();Utils.bitmapToMat(mBitmap1, mat1);Utils.bitmapToMat(mBitmap2, mat2);Imgproc.cvtColor(mat1, mat11, Imgproc.COLOR_BGR2GRAY);Imgproc.cvtColor(mat2, mat22, Imgproc.COLOR_BGR2GRAY);comPareHist(mat11, mat22);}/*** 比较来个矩阵的相似度* @param srcMat* @param desMat*/public void comPareHist(Mat srcMat,Mat desMat){srcMat.convertTo(srcMat, CvType.CV_32F);desMat.convertTo(desMat, CvType.CV_32F);double target = Imgproc.compareHist(srcMat, desMat, Imgproc.CV_COMP_CORREL);Log.e(TAG, "相似度 : ==" + target);Toast.makeText(this, "相似度 : ==" + target, Toast.LENGTH_SHORT).show();}
这里需要注意的一点,两张图片的尺寸一定要一样,不然会报:Error: Assertion failed (A.size == arrays[i0]->size) in init, file /build/master_pack-android/opencv/modules/core/src/matrix_iterator.cpp, line 72这个错。
项目地址:
链接:https://pan.baidu.com/s/1R1bJdPmqJkPue5pgryGAEw
提取码:us1f
android 使用opencv4 图片相似度对比相关推荐
- php 图片一摸一样,PHP实现图片相似度对比
PHP如何实现图片相似度对比?本文将通过感知哈希算法来实现搜索相似图片.希望对大家有所帮助. 感知哈希的优点是简单快速,不受图片大小缩放的影响,缺点是图片的内容不能变更.实际应用中,往往采用更强大的p ...
- 图片相似度对比-java
前言:很多时候我们需要将两个图片进行对比,确定两个图片的相似度.一般常用的就是openCv库,这里就是使用openCv进行图片相似度对比. 依赖: <dependency><grou ...
- php 比对两张图片,PHP实现图片相似度对比
PHP如何实现图片相似度对比?本文将通过感知哈希算法来实现搜索相似图片.希望对大家有所帮助. 感知哈希的优点是简单快速,不受图片大小缩放的影响,缺点是图片的内容不能变更.实际应用中,往往采用更强大的p ...
- 图片相似度对比原理_设计原理:对比和相似性的应用
图片相似度对比原理 You know why you are able to read this article right now apart from the availability of yo ...
- OCR图片相似度对比和分类算法
目录 算法清单 前提知识 一.像素点对比 二.重心对比 三.投影比对 四.分块对比 Logistic回归的直观认识 带入数据进行训练 使用训练好的模型 训练模型的代码 参考文献: Ocr文字识别其中的 ...
- php 图片相似度对比算法,php比较图片相似度代码示例
/** * 图片相似度比较 * * @version $Id: ImageHash.php 4429 2012-04-17 13:20:31Z jax $ * @authorjax.hu * www. ...
- python指定图片区域实现图片相似度对比
第一部分:截取目标图片并保存 # 导入相关的库 from PIL import Image# 打开一张图 img = Image.open(r'D:\Test_Data\main_map\10.png ...
- 利用Python轻松实现图片相似度对比(一)
关于图片相似度,主要简单介绍以下几种方法: 一:通过图片像素来比较,比较简单,对使用场景有要求 二:通过余弦方法来比较图片 原理: 把图片表示一个向量,通过计算向量之间的余弦值来表征图片的相似度,个人 ...
- python+PIL实现淘宝图片找物,图片相似度对比功能
首先安装同其他第三方库,直接 pip install pillow ,from PIL import Image 如果没有报错则说明安装成功 Pillow中最重要的类就是Image,可以通过以下几种方 ...
最新文章
- vue路由history模式,nginx配置
- vim入门教程(实践第一)
- 图解JavaScript原型链继承
- 取消java相关网络协议_java相关网络协议可以关掉吗
- Android 干货,强烈推荐
- 【牛客 - 1080B】tokitsukaze and Hash Table(STLset,并查集,Hash)
- OCF 试图为物联网建立标准,但它面临着不小的挑战
- mit oracle 350平衡线,MIT MI-350 CVT 平衡线_已售器材欣赏区_信谊音响_二手音响_音响发烧站_高级音响 - 音响贵族网...
- NumPy Cookbook 带注释源码 十一、NumPy 的底牌
- 背景固定,内容滑动效果 - 仿QQ下载首页
- linux shell 命令执行结果,如何通过程序执行shell命令并获取命令执行结果?
- win8.1 库 计算机,Win8.1资源管理器库丢失?一键轻松找回
- ubuntu 的重要一课
- MSN登陆以后没有响应处理方法
- 齐杰文学CMS - 关关采集器2021可用19条采集规则
- 赫兹的单位换算_hz单位换算
- 局域网文件服务器单独文件夹加密,局域网 如何给共享文件夹加密
- android程序填空题,10道android填空题及答案
- 深度学习与计算机视觉教程(11) | 循环神经网络及视觉应用(CV通关指南·完结)
- docker webdav_【技术分享】利用WebDAV特性建立隐蔽后门
热门文章
- Javascript 之 ES7 新特性详解
- android 全局hook_全局HOOK API (C#) 的实现
- HOOK API(二)—— HOOK自己程序的 MessageBox
- Windows 7 64位 HookApi例子
- 最通俗易懂的了解Cookie
- 【微信小程序】缓存过期时间的相关设置
- Android SDK Manager 不知为什么突然打不开了?看这里
- 印刷和喷绘过程中高精度油墨流量和压力的串级控制解决方案
- iOS15.4 正式版更新,信号增强,“戴口罩解锁”正式推出
- QDUOJ-数数字-异或运算