opencv - 比较两个图像并获得百分比差异

标签 opencv imagemagick

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

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

enter image description here

图像2:

enter image description here

enter image description here

enter image description here

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

最佳答案

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

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

convert kanji2.png -trim kanji2-t.png

enter image description here

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

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

这表明,如果您修剪汉字 1 和汉字 2,结果图像中有零个像素不同。

如果您像这样比较修剪后的 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 - 比较两个图像并获得百分比差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34652267/

相关文章:

macos - 安装缺少的 ImageMagick 委托(delegate)库 - OSX 10.8

java - 如何使用 OpenCV 的 Watershed Transform 实现过分割?

安卓工作室 NDK : could not load library "libgnuSTL_shared.so"

python - 函数 'cv::CascadeClassifier::detectMultiScale' 中的错误 :(-215:Assertion failed) ! 空()

c++ - 在 OpenCV 中更新 Mat 的子矩阵

svg - 将文本放入框中

linux - 将多页 PDF 转换为单个图像

imagemagick - 使用 Imagemagick,每次使用时保存其变量

perl - 为什么 Perl 的 Image::Magick 会在半透明图像周围创建轮廓,而合成图像却不会?

c++ - 显示黑色图像的几何变形