我存储了一些 100x100 位图,并且我想要将我的应用中的其他传入 100x100 位图与现有的位图进行比较找出图像之间的相似性,并将结果返回给用户哪个位图与传入的位图匹配。
例如, 考虑一下我已经拥有的这个令人兴奋的位图:图像的背景实际上是透明的
然后我收到以下位图作为用户的输入:
现在,我想向用户输出一些相似性度量,并告诉用户这两者是相似的,因为它们是笔直的、指向上方的,并且它们有一个像从底部开始的效果一样的拖尾。
目前我已经尝试了以下方法,但它们没有按预期工作
- 从位图对象中提取像素并比较数组
- 将位图编码为 Base64 字符串,然后进行比较
如果有人向我推荐 OpenCV,请详细解释 OpenCV 方法。我找不到任何合适的 OpenCV android/Java 教程的 Material /资源来查找图像之间的相似性。
最佳答案
我终于实现了我想要的
- 将输入和存储的位图缩放至 100x100。
- 使用
bitmap.extractAlpha()
提取上述两者的Alpha层。 - 通过使用
getPixels()
提取像素来计算输入的余弦相似度;相似度范围为 -1 到 1。 - 如果
相似度>阈值
(在我的例子中为0.6),则返回相同
,否则不同
<
关于java - 在 Android 中查找图像(位图)之间的相似性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62263854/