替换矩形区域中的颜色
Replace a color in a rectangular region
如何使用 Image Magick 替换图像矩形区域内的颜色?
下面是我用 Adobe Photoshop 生成的输入和输出图像示例,方法是选择一个矩形区域(包含网格区域)并执行命令:Image -> Adjustments -> ReplaceColor
并选择黑色作为替换为灰色。
请注意,绿色迹线可以有任何形状和颜色(黑色除外)并且绿色像素覆盖黑色像素,因此 floodfill
是不可能的。
输入:
输出:
我知道如何替换整个图像中的颜色,像这样:
magick.exe convert in.png -f fuzz 0% -fill "rgb(64,64,64)" -opaque "rgb(0,0,0)" out.png
但是上面用灰色替换了所有黑色,甚至是黑色文本,例如“Ch1 Start 9 kHz”,该文本可以是任何内容(它是可变的)。我希望网格区域上方和下方的文本保持黑色。
如果您的输入图像尺寸都相同并且您的裁剪区域始终相同,这将非常简单。使用 ImageMagick,您可以在括号内制作输入图像的克隆,以特定方式处理该克隆,然后将修改后的克隆合成到原始输入上。像这样的命令应该让你非常接近...
magick input.png ^
( +clone -crop 0x808+0+98 -fuzz 20% -fill "rgb(128,128,128)" ^
-opaque "rgb(0,0,0)" -geometry +0+98 ) -composite result.png
首先读取输入图像。然后在括号内创建一个克隆,只裁剪您要修改的部分,用灰色替换该部分中的所有黑色,并设置几何形状,以便可以在其原始位置上合成克隆。之后,在括号外它合成克隆回输入图像并写入输出。
由于您使用的是 ImageMagick v7,除非您需要 IMv6 行为,否则您应该只使用“magick”而不是“magick convert”。
该命令是使用 IMv7 的 Windows 语法。对于 *nix,您必须将续行插入符号“^”更改为反斜杠“\”,并使用反斜杠“\(...\)”转义括号“(...)”。
编辑添加:
您可以在这样的命令中使用“-region”来完成同样的任务...
magick input.png -region %[w]x808+0+98 -fuzz 20% ^
-fill "rgb(128,128,128)" -opaque "rgb(0,0,0)" +region result.png
用“-region”隔离图像的给定区域,仅对该区域进行修改,然后用“+region”取消设置该区域。
注意使用“%[w]”来指定宽度。 IMv7 可以在许多 IMv6 无法使用的地方使用 FX 表达式。
如何使用 Image Magick 替换图像矩形区域内的颜色?
下面是我用 Adobe Photoshop 生成的输入和输出图像示例,方法是选择一个矩形区域(包含网格区域)并执行命令:Image -> Adjustments -> ReplaceColor
并选择黑色作为替换为灰色。
请注意,绿色迹线可以有任何形状和颜色(黑色除外)并且绿色像素覆盖黑色像素,因此 floodfill
是不可能的。
输入:
输出:
我知道如何替换整个图像中的颜色,像这样:
magick.exe convert in.png -f fuzz 0% -fill "rgb(64,64,64)" -opaque "rgb(0,0,0)" out.png
但是上面用灰色替换了所有黑色,甚至是黑色文本,例如“Ch1 Start 9 kHz”,该文本可以是任何内容(它是可变的)。我希望网格区域上方和下方的文本保持黑色。
如果您的输入图像尺寸都相同并且您的裁剪区域始终相同,这将非常简单。使用 ImageMagick,您可以在括号内制作输入图像的克隆,以特定方式处理该克隆,然后将修改后的克隆合成到原始输入上。像这样的命令应该让你非常接近...
magick input.png ^
( +clone -crop 0x808+0+98 -fuzz 20% -fill "rgb(128,128,128)" ^
-opaque "rgb(0,0,0)" -geometry +0+98 ) -composite result.png
首先读取输入图像。然后在括号内创建一个克隆,只裁剪您要修改的部分,用灰色替换该部分中的所有黑色,并设置几何形状,以便可以在其原始位置上合成克隆。之后,在括号外它合成克隆回输入图像并写入输出。
由于您使用的是 ImageMagick v7,除非您需要 IMv6 行为,否则您应该只使用“magick”而不是“magick convert”。
该命令是使用 IMv7 的 Windows 语法。对于 *nix,您必须将续行插入符号“^”更改为反斜杠“\”,并使用反斜杠“\(...\)”转义括号“(...)”。
编辑添加:
您可以在这样的命令中使用“-region”来完成同样的任务...
magick input.png -region %[w]x808+0+98 -fuzz 20% ^
-fill "rgb(128,128,128)" -opaque "rgb(0,0,0)" +region result.png
用“-region”隔离图像的给定区域,仅对该区域进行修改,然后用“+region”取消设置该区域。
注意使用“%[w]”来指定宽度。 IMv7 可以在许多 IMv6 无法使用的地方使用 FX 表达式。