最近项目中需要做到图片相似度对比,搜了半天,网上有很多直接方法,但是感觉没那么靠谱,都是有弊端,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 图片相似度对比相关推荐

  1. php 图片一摸一样,PHP实现图片相似度对比

    PHP如何实现图片相似度对比?本文将通过感知哈希算法来实现搜索相似图片.希望对大家有所帮助. 感知哈希的优点是简单快速,不受图片大小缩放的影响,缺点是图片的内容不能变更.实际应用中,往往采用更强大的p ...

  2. 图片相似度对比-java

    前言:很多时候我们需要将两个图片进行对比,确定两个图片的相似度.一般常用的就是openCv库,这里就是使用openCv进行图片相似度对比. 依赖: <dependency><grou ...

  3. php 比对两张图片,PHP实现图片相似度对比

    PHP如何实现图片相似度对比?本文将通过感知哈希算法来实现搜索相似图片.希望对大家有所帮助. 感知哈希的优点是简单快速,不受图片大小缩放的影响,缺点是图片的内容不能变更.实际应用中,往往采用更强大的p ...

  4. 图片相似度对比原理_设计原理:对比和相似性的应用

    图片相似度对比原理 You know why you are able to read this article right now apart from the availability of yo ...

  5. OCR图片相似度对比和分类算法

    目录 算法清单 前提知识 一.像素点对比 二.重心对比 三.投影比对 四.分块对比 Logistic回归的直观认识 带入数据进行训练 使用训练好的模型 训练模型的代码 参考文献: Ocr文字识别其中的 ...

  6. php 图片相似度对比算法,php比较图片相似度代码示例

    /** * 图片相似度比较 * * @version $Id: ImageHash.php 4429 2012-04-17 13:20:31Z jax $ * @authorjax.hu * www. ...

  7. python指定图片区域实现图片相似度对比

    第一部分:截取目标图片并保存 # 导入相关的库 from PIL import Image# 打开一张图 img = Image.open(r'D:\Test_Data\main_map\10.png ...

  8. 利用Python轻松实现图片相似度对比(一)

    关于图片相似度,主要简单介绍以下几种方法: 一:通过图片像素来比较,比较简单,对使用场景有要求 二:通过余弦方法来比较图片 原理: 把图片表示一个向量,通过计算向量之间的余弦值来表征图片的相似度,个人 ...

  9. python+PIL实现淘宝图片找物,图片相似度对比功能

    首先安装同其他第三方库,直接 pip install pillow ,from PIL import Image 如果没有报错则说明安装成功 Pillow中最重要的类就是Image,可以通过以下几种方 ...

最新文章

  1. vue路由history模式,nginx配置
  2. vim入门教程(实践第一)
  3. 图解JavaScript原型链继承
  4. 取消java相关网络协议_java相关网络协议可以关掉吗
  5. Android 干货,强烈推荐
  6. 【牛客 - 1080B】tokitsukaze and Hash Table(STLset,并查集,Hash)
  7. OCF 试图为物联网建立标准,但它面临着不小的挑战
  8. mit oracle 350平衡线,MIT MI-350 CVT 平衡线_已售器材欣赏区_信谊音响_二手音响_音响发烧站_高级音响 - 音响贵族网...
  9. NumPy Cookbook 带注释源码 十一、NumPy 的底牌
  10. 背景固定,内容滑动效果 - 仿QQ下载首页
  11. linux shell 命令执行结果,如何通过程序执行shell命令并获取命令执行结果?
  12. win8.1 库 计算机,Win8.1资源管理器库丢失?一键轻松找回
  13. ubuntu 的重要一课
  14. MSN登陆以后没有响应处理方法
  15. 齐杰文学CMS - 关关采集器2021可用19条采集规则
  16. 赫兹的单位换算_hz单位换算
  17. 局域网文件服务器单独文件夹加密,局域网 如何给共享文件夹加密
  18. android程序填空题,10道android填空题及答案
  19. 深度学习与计算机视觉教程(11) | 循环神经网络及视觉应用(CV通关指南·完结)
  20. docker webdav_【技术分享】利用WebDAV特性建立隐蔽后门

热门文章

  1. Javascript 之 ES7 新特性详解
  2. android 全局hook_全局HOOK API (C#) 的实现
  3. HOOK API(二)—— HOOK自己程序的 MessageBox
  4. Windows 7 64位 HookApi例子
  5. 最通俗易懂的了解Cookie
  6. 【微信小程序】缓存过期时间的相关设置
  7. Android SDK Manager 不知为什么突然打不开了?看这里
  8. 印刷和喷绘过程中高精度油墨流量和压力的串级控制解决方案
  9. iOS15.4 正式版更新,信号增强,“戴口罩解锁”正式推出
  10. QDUOJ-数数字-异或运算