【问题标题】:Compare two images and get the percent difference比较两张图像并获得百分比差异
【发布时间】:2016-01-07 10:03:25
【问题描述】:

我知道一些用 ImageMagick 或 OpenCV 比较 2 张图像的方法

但就我而言,我也有不同位置的相同角色。 图片1:

图片2:

那么,我现在应该怎么做才能找到 Image1 和 Image2 之间的 % 差异值?

【问题讨论】:

  • 您可能需要检测图像中黑色的边界,然后进行归一化,使每个图像的大小都相同等。如果您能找到一条直线,您也可以旋转它,这样它们就被在同一轴上进行比较。

标签: opencv imagemagick


【解决方案1】:

这实际上回答了您的问题 - 实际上并没有询问有关图像 3 和 4 的任何问题 - 但我担心它不会对您有太大帮助。

正如@GPPK 建议的那样,您需要修剪掉汉字字符周围的多余材料,您可以使用 ImageMagick 中的 -trim 命令来完成。我添加了一个细红色边框,以便您可以看到边缘的位置:

convert kanji2.png -trim kanji2-t.png

如果您想对图像 1 和 2 执行此操作,然后比较它们,您可以像这样一次性完成所有操作:

convert -metric ae kanji1.png kanji2.png -trim -compare -format "%[distortion]" info:
0

这表明如果您修剪 kanji1 和 kanji2,生成的图像中有零个像素不同。

如果你像这样比较修剪后的 kanji1 和 kanji3,你会得到:

convert -metric AE kanji1.png kanji3.png -trim -compare -format "%[distortion]" info:
893184

表示 5,000,000 中的 900,000 个像素是不同的。

同样,如果你比较 kanji1 和 kanji4:

convert -metric AE kanji1.png kanji4.png -trim -compare -format "%[distortion]" info:
1.14526e+06

或 500 万中的 110 万。

但是,当您的图像尺寸(比例)不同或旋转时,这无济于事。

您可以在比较之前将图像缩放到标准化大小,我想这可能会帮助您变得更加“缩放不变”

convert -metric AE kanji1.png kanji4.png -trim -scale 1000x1000! -compare -format "%[distortion]" info:

您还可以使用一个小的迭代过程来旋转图像,该过程将图像旋转 +/- 20 度,并选择具有最小修剪边界框的那个变得更加“方向不变”。但是如果字符被剪切,或者更胖,或者更薄,或者更亮,或者更暗,或者对比度更高,你仍然会遇到问题......我认为你需要查看“模板匹配”

【讨论】:

  • 谢谢。能否提供一些 OpenCV 代码示例?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-03-20
  • 1970-01-01
  • 1970-01-01
  • 2020-10-10
  • 2018-04-18
相关资源
最近更新 更多