node.js的图像比较库

时间:2015-03-09 14:25:02

标签: node.js image opencv machine-learning computer-vision

我正在寻找一个带有node.js支持或linux标准库的基本图像比较库。支持比较多分辨率图像和轻微的颜色变化将是很好的。有什么建议吗?

2 个答案:

答案 0 :(得分:2)

如果您正在寻找两个图像之间的简单“距离”,dhash-image模块会实现dHash算法。

它转换为灰度(忽略颜色)并处理不同尺寸的图像,因此可以很好地满足这些需求。

我一直在使用dHash进行图像处理库的自动回归测试。如果您需要这种相对精度,它会非常快,但我希望OpenCV的SIFT / SURF功能可以提供更高的绝对精度。

答案 1 :(得分:2)

嘿RembrandtJS可能正是您正在寻找的。 它是我们刚刚发布的轻量级库,它使用插入式Node.JS替换节点画布进行像素方式的图像比较。 它接受blob和url作为图像源,因此您可以简单地执行此操作:

import Rembrandt from 'rembrandt'

const rembrandt = new Rembrandt({
  // `imageA` and `imageB` can be either Strings (file path on node.js,
  // public url on Browsers) or Buffers
  imageA: '/path/to/imageA',
  imageB: fs.readFileSync('/path/to/imageB'),

  // Needs to be one of Rembrandt.THRESHOLD_PERCENT or Rembrandt.THRESHOLD_PIXELS
  thresholdType: Rembrandt.THRESHOLD_PERCENT,

  // The maximum threshold (0...1 for THRESHOLD_PERCENT, pixel count for THRESHOLD_PIXELS
  maxThreshold: 0.01,

  // Maximum color delta (0...255):
  maxDelta: 20,

  // Maximum surrounding pixel offset
  maxOffset: 0,

  renderComposition: true, // Should Rembrandt render a composition image?
  compositionMaskColor: Rembrandt.Color.RED // Color of unmatched pixels
})

// Run the comparison
rembrandt.compare()
  .then(function (result) {
    console.log('Passed:', result.passed)
    console.log('Difference:', (result.threshold * 100).toFixed(2), '%')
    console.log('Composition image buffer:', result.compositionImage)

    // Note that `compositionImage` is an Image when Rembrandt.js is run in the browser environment
  })
  .catch((e) => {
    console.error(e)
  })

正如您所看到的,Rembrandt还允许您引入可能为处理颜色变化提供一些支持的阈值。