【问题标题】:Image diff preserving color for overlaying图像差异保留颜色以进行叠加
【发布时间】:2021-11-24 01:03:02
【问题描述】:

我有两张颜色几乎相同的图像。我想生成一个透明图像,可以覆盖在第一张图像上,使其看起来像第二张。我能找到的所有图像差异工具都不会按照我需要的方式保留颜色。有任何想法吗? (最好是 Linux 命令行)

这些是我目前正在使用的测试图像。 理想情况下,结果将是这样的,但准确到差异。 (这个不能加阴影,必须单独渲染)

【问题讨论】:

    标签: linux image colors diff difference


    【解决方案1】:

    您可以在命令行中使用 ImageMagick 执行此操作,如下所示。我将向您展示我采取的步骤以及原因,以便您随时可以偏离我的答案,并希望得到您想要的确切结果。

    这是我最初的尝试:

    magick compare 1.jpg 2.jpg result.png
    

    这是一个开始,但不幸的是,您使用的是 JPEG,所以到处都有丑陋的阻塞伪影,让我们用一些 fuzz 将它们删除 - 不过,理想情况下,您应该使用无损 PNG 而不是JPG:

    magick compare -fuzz 10% 1.jpg 2.jpg result.png
    

    现在我们可以看到两个新问题 - ImageMagick 已将降低饱和度的原始图像留作我们的参考,并且差异已用纯红色着色。所以我们要去掉原来的背景图片,把高光和低光的颜色改成白色和黑色来做一个改变蒙版:

    magick compare -fuzz 10% 1.jpg 2.jpg -compose Src -highlight-color white -lowlight-color black mask.png
    

    如果我们现在采用该蒙版并将其作为透明层引入原始图像,则其他所有内容都将变为透明:

    magick 1.jpg mask.png -compose CopyOpacity -composite result.png
    


    顺便说一句,您可以将它变成一个单行,从而避免需要像这样在磁盘上的中间文件:

    magick compare -fuzz 10% 1.jpg 2.jpg -compose Src -highlight-color white -lowlight-color black png: | magick 1.jpg - -compose CopyOpacity -composite result.png
    

    第一个magick 将掩码作为PNG 生成到它的stdout 上。第二个magick 从它的stdin 中读取掩码并将其放入1.jpg 作为alpha 通道:

    【讨论】:

    • 马克,您可以从转换中进行比较,这样您就可以在一个命令行中完成所有操作而无需管道。请参阅convert .... -compare ...imagemagick.org/script/command-line-options.php#compare
    • @fmw42 这个想法确实发生在我身上,但我不知道如何使用-compose src(摆脱不饱和背景)以及我真正想做的-compose difference - 所以我分两步完成。
    • @Mark 我尝试了高光和低光问题。我在github.com/ImageMagick/ImageMagick/issues/4312 发布了一个问题
    • @fmw42 有趣-也许可以用-define compose:highlight-color=white 或其他东西来完成。
    • @Mark 不,不是那样。我认为这些“减号”设置将在后续版本中添加。我认为这是创建 -compare 选项时的疏忽
    猜你喜欢
    • 1970-01-01
    • 2011-03-03
    • 2012-08-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-30
    • 2010-09-14
    • 1970-01-01
    相关资源
    最近更新 更多