当前位置: 首页 > 面试题库 >

如何使用Node.js比较两个图像

易祖鹤
2023-03-14
问题内容

我正在寻找一种比较两个图像以查看它们有多相似的方法。谷歌搜索它会产生大量的图像处理结果(裁剪,调整大小等),但是没有什么可以做图像的近似比较。有一个Node.js库,但是它的版本为0.0.1,并且依赖于各种第三方系统软件包,因此不稳定或可移植。

遵循以下原则:

var imgComparator = require('some-awesome-image-comparator-module');
// result would be between 1.0 and 0.0, where 1.0 would mean exact match
var result = imgComparator.compare('/path/to/image/1.png', '/path/to/image/2.png');

问题答案:

有node-opencv模块,您可以使用它来执行繁重的操作,例如图像比较。

屏幕截图或图标可以变形(缩放,旋转,倾斜…)吗?我头顶上有很多方法可以帮助您:

@carlosdc提到的简单欧几里德距离(不适用于转换后的图像,您需要一个阈值)。(归一化)互相关 -一种简单的指标,可用于比较图像区域。它比简单的欧式距离更健壮,但不适用于变换后的图像,因此您将再次需要一个阈值。直方图比较-如果使用归一化的直方图,则此方法效果很好,并且不受仿射变换的影响。问题是确定正确的阈值。它还对颜色变化(亮度,对比度等)非常敏感。您可以将其与前两个结合使用。
显着点/区域的检测器 -例如MSER(最大稳定末端区域),SURF或SIFT。这些算法非常健壮,对于您的简单任务而言可能过于复杂。好消息是,您不必具有仅一个图标的确切区域,这些检测器功能强大,可以找到正确的匹配项。本文对这些方法进行了很好的评估:局部不变特征检测器:调查。
其中大多数已在OpenCV中实现-例如,参见cvMatchTemplate方法(使用直方图匹配):http ://dasl.mem.drexel.edu/~noahKuntz/openCVTut6.html。突出点/区域检测器也可用-请参阅OpenCV特征检测。



 类似资料:
  • 请帮助我提供一个解决方案,通过使用SeleniumRubyWebDriver比较Web应用程序的两个URL中的两个图像是否相同(我的意思是每个图像中的内容都相同)。 例如:访问下面的网址时,我有一个小图像显示: 访问下面的URL时,我还有另一个图像: 我怎样才能比较这两个图像,看看他们是否是相同的使用Selenium Ruby WebDrive?任何建议都很感激。非常感谢。

  • 问题内容: 我有两个地图声明为。在这里可以是另一个(依此类推)。我想检查两个地图是否完全相同,但不知道其深度。除了使用递归,我还可以比较每个地图上被调用的输出吗?还是有比较简单的方法比较地图? 问题答案: 快速回答 您应该使用该方法,因为已经实现了该方法以执行所需的比较。本身就像使用迭代器一样,但这是一种效率较低的方法。另外,正如@Teepeemm所指出的那样,它受元素顺序的影响(基本上是迭代器的

  • 问题内容: 在Java中,我想比较两个地图,如下所示,我们是否有现有的API可以做到这一点? 谢谢 问题答案: 我将使用Set的removeAll()功能来设置键的差异,以查找添加和删除的内容。可以通过使用设置为HashMap的条目进行设置差异来检测实际更改。Entry同时使用键和值实现equals()。 输出量

  • 问题内容: 我有两个。每个大小为100000。我想比较它们并计算匹配的元素。 这是我的代码: 在这里比较过程要花费很多时间。 如何解决和优化此问题。 问题答案: 您应该使用:返回一个包含collection1中所有元素的集合,这些元素也处于collection2中。

  • 我只是实现了自己的插入排序,并试图验证功能,包括稳定性。 对于给定的未排序元素列表,我试图根据collections#sort(list)方法验证我的代码。 我找到了AbstractiterAbleAssert#ContainsExactlYelementsOf方法。 最后,我将方法跟踪到调用的位置。 方法是否覆盖稳定性? 或者,对于是否应该添加其他方法?

  • 问题内容: 我必须比较两个对象(不是)。比较它们的规范方法是什么? 我可以想到: 该运营商只比较基准,因此这将仅适用于较低的整数值的工作。但是也许自动装箱开始了…? 这看起来像一个昂贵的操作。是否以此方式计算出哈希码? 有点冗长… 编辑: 谢谢您的答复。尽管我现在知道该怎么办,但事实已分布在所有现有答案(甚至是已删除的答案)上,我也不知道该接受哪个答案。因此,我将接受最佳答案,即所有三种比较可能性