【问题标题】:Compare images in node.js (using e.g. opencv)比较 node.js 中的图像(使用例如 opencv)
【发布时间】:2015-06-14 17:44:58
【问题描述】:

我想要做的是使用 node.js 获取图像差异。 最终我想有一个方法期待例如两个文件路径或图像数据输出两者的减法。有点像imagemagick 中的compare 函数。

类似:

var comparison_result = compareModule.compare('./image1.png', './image2.png');

另外,我想获得结果图像中标记差异的点的位置。

像这样:

comparison_result.forEach(function(difference) {
    console.log("A difference occurred at " + difference.x + "|" + difference.y);
}); 

我安装了node-opencv,但是我找不到将基本 opencv c++ 函数映射到 node.js 的文档。 我要使用的函数是cvSub

我想避免使用js-imagediff,因为它与画布一起使用,依赖于“cairo”,我不确定我是否可以访问这些点,因为在文档中它似乎只是返回差异作为图片。

【问题讨论】:

  • 减法会给你另一个(不同的)图像。您可能正在寻找类似norm

标签: javascript node.js opencv image-processing imagemagick


【解决方案1】:

我从未尝试通过cv::addWeighted() 计算每个元素的差异,但它可能在实践中有效:

var diff = new cv.Matrix(first.width(), first.height());
diff.addWeighted(first, 1.0, second, -1.0);

在本机代码 (C++) 中,此函数可以替换为以下表达式:

diff = first*1.0 + second*(-1.0) + 0.0;

p.s.:node-opencv 的作者发布了一个测量相似度的示例代码:
node-opencv / examples / dissimilarity.js

【讨论】:

  • 非常好的答案!您提供的代码立即生效。我没有机会构建最新版本的库来测试“cv.ImageSimilarity”是否也可以工作。但是,我猜该函数只返回一个浮点值,表示两个图像的相似性。对我来说,下一步将对连接的像素进行聚类,以便将两个“像素邻居”视为一个差异。 github.com/peterbraden/node-opencv/blob/master/examples/… 应该可以做到这一点
猜你喜欢
  • 1970-01-01
  • 2011-06-18
  • 2013-01-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-05-10
相关资源
最近更新 更多