Imagemagick 如何比较两个忽略区域的图像

Imagemagick 如何比较两个忽略区域的图像,imagemagick,Imagemagick,我有一套回归测试,可以自动从我的iPhone应用程序中截图 我正在使用Imagemagick将截图与保存的参考截图进行比较 简单地说: $ compare -metric AE new.png ref.png diff.png 0 但是,屏幕的某些区域对此测试不感兴趣,我想忽略它们(例如:菜单面板、状态图标等) 我想在我的ref图像中清空这些区域。理想情况下,最简单的是,我只是在我不想比较的区域周围绘制透明块 但我如何让imagemagick忽略这些透明区域 这将提取alpha区域,并为透明区

我有一套回归测试,可以自动从我的iPhone应用程序中截图

我正在使用Imagemagick将截图与保存的参考截图进行比较

简单地说:

$ compare -metric AE new.png ref.png diff.png
0
但是,屏幕的某些区域对此测试不感兴趣,我想忽略它们(例如:菜单面板、状态图标等)

我想在我的ref图像中清空这些区域。理想情况下,最简单的是,我只是在我不想比较的区域周围绘制透明块

但我如何让imagemagick忽略这些透明区域

这将提取alpha区域,并为透明区域生成黑色,为其他区域生成白色:

$ convert ref.png -alpha extract ref_mask.png
更好的是,这会使alpha为白色,而其他颜色为黑色:

$ convert ref.png -alpha extract -negate ref_mask.png
我能把那个面具和比较结合起来吗


非常感谢

查看ImageMagickcompare,您可以使用带有标志的compare comand

-extract geometry   //extract area from image
看看

这是一个构建用于在连续集成中比较图像的软件。
它允许您(使用UI)选择应比较图像的哪些部分。

您在参考图像中使用透明度来遮罩感兴趣区域的想法是正确的。您需要使用
bash
process substitution来解决这个问题,从而使命令的输出看起来像另一个命令的文件。因此,如果要
diff
两个文件的前三行,可以执行以下操作:

diff <(head -3 file1) <(head -3 file2)

因此,看看
No中的部分,它没有那么有用,因为它需要通过rect指定所有区域。那将非常耗时。我想到的工作流程就是简单地编辑reg图像并屏蔽不相关的区域。例如,可能有十几个区域需要移除。但是谢谢你的建议。是的,我也对同样的事情感兴趣,但是我想忽略圆形选择之外的区域。。。
compare -metric AE <(convert input.png ref.png -compose copy-opacity -composite png:) ref.png diff.png
compare -metric AE <file containing masked input.png> ref.png diff.png 
compare -metric AE <(convert b.png ref.png -compose copy-opacity -composite png:) ref.png diff.png
0


compare -metric AE <(convert c.png ref.png -compose copy-opacity -composite png:) ref.png diff.png
3245