java - 在 Android 中查找图像(位图)之间的相似性

标签 java android opencv image-processing bitmap

我存储了一些 100x100 位图,并且我想要将我的应用中的其他传入 100x100 位图与现有的位图进行比较找出图像之间的相似性,并将结果返回给用户哪个位图与传入的位图匹配。

例如, 考虑一下我已经拥有的这个令人兴奋的位图:图像的背景实际上是透明的

Existing Bitmap

然后我收到以下位图作为用户的输入:

User input image

现在,我想向用户输出一些相似性度量,并告诉用户这两者是相似的,因为它们是笔直的、指向上方的,并且它们有一个像从底部开始的效果一样的拖尾。

目前我已经尝试了以下方法,但它们没有按预期工作

  1. 从位图对象中提取像素并比较数组
  2. 将位图编码为 Base64 字符串,然后进行比较

如果有人向我推荐 OpenCV,请详细解释 OpenCV 方法。我找不到任何合适的 OpenCV android/Java 教程的 Material /资源来查找图像之间的相似性。

最佳答案

我终于实现了我想要的

  1. 将输入和存储的位图缩放至 100x100。
  2. 使用bitmap.extractAlpha()提取上述两者的Alpha层。
  3. 通过使用getPixels()提取像素来计算输入的余弦相似度;相似度范围为 -1 到 1。
  4. 如果相似度>阈值(在我的例子中为0.6),则返回相同,否则不同<

关于java - 在 Android 中查找图像(位图)之间的相似性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62263854/

相关文章:

java - 在哪里放置用于列出对象的方法

java - 单选按钮与右侧按钮和左侧文本对齐

java - Java 和 opencv 3.0 中的 OpenCV 错误 : Assertion failed (! empty()) 是什么意思?

java - 在 Eclipse 中导入现有的 Java 项目,但 JFrame 的设计 View 不存在?

java - Spring数据jpa中具有复合PK的表的 native 查询

c# - 如何在 C# 中创建 JSONArray 并将该数据发送到 Android 应用程序

opencv - cv2.error : OpenCV(4. 3.0) ../opencv_contrib/modules/dnn_superres/src/dnn_superres.cpp:97: error: (-2:Unspecified error) 未指定模型

c++ - Opencv 数据类型定义

注入(inject)另一个对象的 Java 自定义注解

android - 强制应用程序如何始终运行在自己的任务中?