首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用ImageMagick的图像“Diff”

使用ImageMagick的图像“Diff”
EN

Stack Overflow用户
提问于 2011-02-27 10:46:55
回答 3查看 96.8K关注 0票数 208

我怎样才能得到两个图像之间的区别?我有最初的形象。有人在原图的正本上写字。现在,我需要比较原始和文字上的图像,并只提取文字的图像格式。

我有一张房子的照片。有人抄了一本,写着“你好!”在复印件上。我想以某种方式比较这两张照片,移出房子,留下一个“你好!”的图片。

这与ImageMagick是可能的吗?我知道有一些方法可以得到图像之间的统计差异,但这不是我想要的。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-07-06 12:24:18

我自己最喜欢的两个是:

代码语言:javascript
运行
复制
 compare image1 image2 -compose src diff.png
 compare image1 image2 -compose src diff.pdf

上面两个命令的唯一区别是:第一个命令将两个图像之间的视觉差异显示为一个PNG文件,第二个命令显示为一个PDF文件。

生成的diff文件显示所有不同的红色像素。那些没有变化的看起来是白色的。

又短又甜。

注意,您的图像需要而不是是相同的类型。你甚至可以混合JPEG,TIFF,PNG --在一个条件下:图像应该是相同大小的(图像尺寸以像素为单位)。输出格式由输出文件名的扩展名决定。

如果您出于某种原因需要比默认分辨率(72 dpi)更高的分辨率,那么只需添加一个适当的-density参数:

代码语言:javascript
运行
复制
 compare -density 300 image1 image2 -compose src diff.jpeg

举例说明

以下是上述命令变体结果的几个示例。注意:比较的两个文件甚至是 PDF文件,所以它也适用于这些文件(只要它们是1-寻呼机)!

左:图像与文本相对应,中心:原始图像,再匹配,右:差异(=文本),以红色像素表示。

代码语言:javascript
运行
复制
compare \
        porsche-with-scratch.pdf  porsche-original.pdf \
       -compose src \
        diff-compose-default.pdf

这是我前面建议的相同的命令。

左:图像与文本相对应,中心:原始图像,重新编码,右:差异,在'seagreen‘像素。

代码语言:javascript
运行
复制
compare \
        porsche-with-scratch.pdf  porsche-original.pdf \
       -compose src \
       -highlight-color seagreen \
        diff-compose-default.pdf

此命令添加一个参数,以使不同的像素'seagreen‘而不是默认的红色。

左:图像与文本相对应,中心:原始图像,更高级,,右:蓝色差异(但是w.一些上下文背景)

代码语言:javascript
运行
复制
compare \
        porsche-with-scratch.pdf  porsche-original.pdf \
       -highlight-color blue \
        diff-compose-default.pdf

此命令移除-compose src部分--结果是compare的默认行为,它将2幅不同图像中的第一幅保留为轻松的背景。(这一次添加了参数,使diff像素以蓝色显示。)

票数 364
EN

Stack Overflow用户

发布于 2015-11-12 14:12:19

虽然compare在许多应用程序中做得很好,但我发现有时我更喜欢一种不同的方法,特别是当比较图像时,这些图像大多是灰度的:

代码语言:javascript
运行
复制
convert '(' file1.png -flatten -grayscale Rec709Luminance ')' \
        '(' file2.png -flatten -grayscale Rec709Luminance ')' \
        '(' -clone 0-1 -compose darken -composite ')' \
        -channel RGB -combine diff.png

其思想如下:将file1.pngfile2.png转换为灰度。然后将第一个通道作为结果图像的红色通道,第二个通道作为绿色通道。蓝色通道是由这两个使用darken组合运算符形成的,这实际上意味着取最小值。

所以这两幅图像中白色的东西都是白色的。在这两个图像中都是黑色的东西仍然是黑色的。第一幅图是白色的,第二张是黑色的,第二张是白色的,第一张是黑色的。

结果给出了一个很好的彩色编码图像,您可以很容易地将绿色与第一个输入和红色与第二个相关联。下面是一个示例,我使用它来比较来自LaTeX的输出和来自KaTeX的输出(在我修正了一些错误使其更好之前):

您可以组合这些方法,使用compare查看更改的位置,然后使用上面的方法更详细地查看它是如何变化的。

票数 74
EN

Stack Overflow用户

发布于 2022-09-21 14:49:56

在ImageMagick 6.3.4中,您可以使用-compose ChangeMask (也请参阅“删除已知背景”和下面的章节)。例如,使用IM7和这些图像( stone.pngdiamond_ore.pngnetherrack.png )

magick diamond_ore.png stone.png -fuzz 15% -compose ChangeMask -composite diamond_ore_overlay.png给出:

magick netherrack.png \( diamond_ore.png stone.png -fuzz 15% -compose ChangeMask -composite +compose \) -composite nether_diamond_ore.png给出:

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5132749

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档