一尘不染

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

node.js

我正在寻找一种比较两个图像以查看它们有多相似的方法。谷歌搜索它会产生大量的图像处理结果(裁剪,调整大小等),但是没有什么可以做图像的近似比较。有一个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');

阅读 714

收藏
2020-07-07

共1个答案

一尘不染

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

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

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

2020-07-07