Imagemagick 如何基于遮罩图像查看/提取图像中的像素

Imagemagick 如何基于遮罩图像查看/提取图像中的像素,imagemagick,Imagemagick,我试图做到这一点:通过使用遮罩图像查看/提取源图像中的像素 convert background.png source.png \ \( mask.png -fuzz 1% -fill black +opaque "rgb(237,28,36)" \ -fill white +opaque black \) \ -compose over -composite result.png 简单的情况可能是在遮罩中使用“任意”像素。但最好定义哪种颜色的像素应该用于遮罩(上图中的“高级情况”)

我试图做到这一点:通过使用遮罩图像查看/提取源图像中的像素

convert background.png source.png \
\( mask.png -fuzz 1% -fill black +opaque "rgb(237,28,36)" \
    -fill white +opaque black \) \
-compose over -composite result.png

简单的情况可能是在遮罩中使用“任意”像素。但最好定义哪种颜色的像素应该用于遮罩(上图中的“高级情况”)

我尝试了
convert source.png mask.png-compose Screen-composite source filtered.png
,但修改了源中的像素

以下是指向实际文件的链接:

编辑:为实际文件添加链接

也许该操作最有效

convert Source.png Mask.png -fx 'v == #E8212D ? u : v' output.png

也许手术效果最好

convert Source.png Mask.png -fx 'v == #E8212D ? u : v' output.png


如果您单独提供图像会更好。我把它们剪了下来,但它们不太相配。不过,您可以使用Imagemagick了解它的工作原理

首先,这是从你的蒙版图像中产生一个只有灰色和白色的背景图像。使红色和蓝色的方块与其他方块变成相同的灰色

遮罩图像:

现在,以背景、源图像为背景,处理遮罩,使红色变为白色,其他一切变为黑色。然后使用二值遮罩图像在背景上合成源

convert background.png source.png \
\( mask.png -fuzz 1% -fill black +opaque "rgb(237,28,36)" \
    -fill white +opaque black \) \
-compose over -composite result.png

如果您单独提供图像会更好。我把它们剪了下来,但它们不太相配。不过,您可以使用Imagemagick了解它的工作原理

首先,这是从你的蒙版图像中产生一个只有灰色和白色的背景图像。使红色和蓝色的方块与其他方块变成相同的灰色

遮罩图像:

现在,以背景、源图像为背景,处理遮罩,使红色变为白色,其他一切变为黑色。然后使用二值遮罩图像在背景上合成源

convert background.png source.png \
\( mask.png -fuzz 1% -fill black +opaque "rgb(237,28,36)" \
    -fill white +opaque black \) \
-compose over -composite result.png

对于新的独立图像,这是在Imagemagick中实现所需功能的一种方法

资料来源:

遮罩:

将遮罩转换为二值图像,其中白色为红色,其他地方为黑色。然后做一个合成-乘法-合成来组合它们

convert source.png \
\( mask.png -fuzz 1% -fill white -opaque red \
   -fill black +opaque white \) \
-compose multiply -composite \
result.png

对于新的独立图像,这是在Imagemagick中实现所需功能的一种方法

资料来源:

遮罩:

将遮罩转换为二值图像,其中白色为红色,其他地方为黑色。然后做一个合成-乘法-合成来组合它们

convert source.png \
\( mask.png -fuzz 1% -fill white -opaque red \
   -fill black +opaque white \) \
-compose multiply -composite \
result.png

有没有一种实用的方法可以将此遮罩应用于许多图像

是的,在Imagemagick中,您可以使用mogrify处理文件夹中的所有图像。我假设您对文件夹中的所有图像使用相同的遮罩图像,并且所有图像的大小都相同

首先为所有要更改的图像创建一个目录(或使用现有的目录)。假设它位于桌面上的test1文件夹中。创建一个新的空目录。假设在桌面上作为文件夹test2。然后从桌面上的彩色遮罩创建一个二进制遮罩图像。在要更改的png文件夹中不能有png掩码。如果你把面具做成gif,那么它可以放在文件夹里,因为mogrify只处理PNG,正如我在下面指定的那样

convert mask.png -fuzz 1% -fill white -opaque red -fill black +opaque white newmask.png

然后使用mogrify处理test1中的所有文件,并将输出放在test2中

cd
cd desktop/test1
mogrify -format png -path ../test2 -draw 'image multiply 0,0 0,0 "../newmask.png"' *.png

看见

有没有一种实用的方法可以将此遮罩应用于许多图像

是的,在Imagemagick中,您可以使用mogrify处理文件夹中的所有图像。我假设您对文件夹中的所有图像使用相同的遮罩图像,并且所有图像的大小都相同

首先为所有要更改的图像创建一个目录(或使用现有的目录)。假设它位于桌面上的test1文件夹中。创建一个新的空目录。假设在桌面上作为文件夹test2。然后从桌面上的彩色遮罩创建一个二进制遮罩图像。在要更改的png文件夹中不能有png掩码。如果你把面具做成gif,那么它可以放在文件夹里,因为mogrify只处理PNG,正如我在下面指定的那样

convert mask.png -fuzz 1% -fill white -opaque red -fill black +opaque white newmask.png

然后使用mogrify处理test1中的所有文件,并将输出放在test2中

cd
cd desktop/test1
mogrify -format png -path ../test2 -draw 'image multiply 0,0 0,0 "../newmask.png"' *.png

看见

请分别发布图片供我们测试。很难剪下每个源图像和掩码图像的完全相同的区域。请发布单独的图像供我们测试。很难剪切出每个源图像和掩码图像的完全相同的区域。非常抱歉:(我添加了指向实际文件的链接。)原始图像是为了说明问题,以便我可以解释问题..很抱歉让您经历裁剪过程..非常抱歉:(我添加了指向实际文件的链接..原始图像是为了演示,以便我可以解释问题..很抱歉让您经历裁剪过程..哇!谢谢您的回答。它看起来很复杂,但只要有效,没关系..我将尝试代码并尽快给出反馈..这可能是一个不同的问题,但是,有没有一种实用的方法可以将此掩码应用于许多图像?我可以在shell中编写一个循环,但我想知道是否有Imagemagick方法可以将一个掩码应用于许多图像?哇!谢谢你的回答。它看起来很复杂,但只要它能工作,没关系。我会尝试代码并尽快给出反馈。这可能是一个不同的问题,但是,有没有一种实用的方法可以将此掩码应用于多个图像?我可以在shell中编写一个循环,但我想知道是否有Imagemagick方法可以将一个掩码应用于多个图像?感谢
-fx
操作符的指针。在我的例子中,以下操作非常完美:
convert source.png mask.png-fx'v.r==1?u:0'output.png
interesti很遗憾,当我使用像素颜色时,它不起作用,就像你建议的那样;
convert source.png mask.png-fx'v==#FF0000?u:0'output.png
谢谢你的指针