27

我正在寻找一种方法来比较两个图像,看看它们有多相似。谷歌搜索它会产生大量的图像处理结果(裁剪、调整大小等),但无法对图像进行近似比较。有一个 Node.js 库,但它是 0.0.1 版本,并且依赖于各种 3rd 方系统包,因此不稳定或可移植。

这些方面的东西:

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');
4

4 回答 4

15

node-opencv模块,你可以使用它来执行像图像比较这样的繁重操作。关于这方面的好话题:Simple and fast method to compare images forsimilarity

于 2013-08-30T11:46:09.297 回答
12

还有一个看起来很有前途的image-diff,它是由 Uber 制造的。

var imageDiff = require('image-diff')

imageDiff({
  actualImage: 'checkerboard.png',
  expectedImage: 'white.png'
}, function (err, imagesAreSame) {
  // error will be any errors that occurred
  // imagesAreSame is a boolean whether the images were the same or not
  // diffImage will have an image which highlights differences
})
于 2015-06-18T17:07:00.897 回答
3

我找到了这个库,它可能对你有用

https://github.com/HumbleSoftware/js-imagediff

于 2014-05-09T12:20:40.493 回答
3

不推荐使用图像差异

从他们的github:

我们在这个项目上不再有任何活跃的维护者,因此停止了维护。

作为替代,请查看替代项目,例如外观相同和像素匹配:

https://github.com/gemini-testing/looks-same

https://github.com/mapbox/pixelmatch

我个人使用像素匹配:

最小、最简单、最快的 JavaScript 像素级图像比较库,最初是为了比较测试中的屏幕截图而创建的。

具有准确的抗锯齿像素检测和感知色差指标。

灵感来自 Resemble.js 和 Blink-diff。与这些库不同,pixelmatch 大约有 150 行代码,没有依赖关系,并且适用于图像数据的原始类型数组,因此速度非常快,可以在任何环境(节点或浏览器)中使用。

const fs = require('fs');
const PNG = require('pngjs').PNG;
const pixelmatch = require('pixelmatch');

const img1 = PNG.sync.read(fs.readFileSync('img1.png'));
const img2 = PNG.sync.read(fs.readFileSync('img2.png'));
const {width, height} = img1;
const diff = new PNG({width, height});

const difference = pixelmatch(img1.data, img2.data, diff.data, width, height, {threshold: 0.1});

fs.writeFileSync('diff.png', PNG.sync.write(diff)); // see diff.png for the difference

const compatibility = 100 - dif * 100 / (width * height);
console.log(`${difference} pixels differents`);
console.log(`Compatibility: ${compatibility}%`);

在此处查找演示:https ://observablehq.com/@mourner/pixelmatch-demo

https://github.com/mapbox/pixelmatch

于 2019-11-15T08:27:09.613 回答