如何将图像区域转换为白色或透明?
How to convert image areas to white or transparent?
我正在尝试将下图中的某些矩形区域转换为白色或透明。
我可以通过以下命令使用 ImageMagick 实现它,它首先制作透明的所需颜色,最后使用“否定”将其余颜色转换为黑色。
convert input.png \
-transparent '#4B8DF8' \
-transparent '#27A9E3' \
-transparent '#2295C9' \
-transparent '#E7191B' \
-transparent '#C91112' \
-transparent '#28B779' \
-transparent '#17A769' \
-transparent '#852B99' \
-transparent '#751E88' \
-transparent '#D84A38' \
-transparent '#B4CEF8' \
-transparent '#17A76A' \
-transparent '#CA1112' \
-transparent '#2296CA' \
-transparent '#DDE8FA' \
-alpha extract -negate out_convert.png
我目前的 Python/Wand 脚本是这样的:
from wand.image import Image
with Image(filename='input.png') as img:
img.transparent_color('#4B8DF8', alpha=0.0)
img.transparent_color('#27A9E3', alpha=0.0)
img.transparent_color('#2295C9', alpha=0.0)
img.transparent_color('#E7191B', alpha=0.0)
img.transparent_color('#C91112', alpha=0.0)
img.transparent_color('#28B779', alpha=0.0)
img.transparent_color('#17A769', alpha=0.0)
img.transparent_color('#852B99', alpha=0.0)
img.transparent_color('#751E88', alpha=0.0)
img.transparent_color('#D84A38', alpha=0.0)
img.transparent_color('#B4CEF8', alpha=0.0)
img.transparent_color('#17A76A', alpha=0.0)
img.transparent_color('#CA1112', alpha=0.0)
img.transparent_color('#2296CA', alpha=0.0)
img.transparent_color('#DDE8FA', alpha=0.0)
img.negate()
img.save(filename='out_python.png')
下面我展示了我使用 convert
命令得到的输出(只有黑色和白色)和使用 python/wand
脚本的输出(除了黑色和白色它还有一些其他颜色)。
为了获得与 ImageMagick 相同的输出,我的脚本中缺少什么? Wand 是一个很好的 python 库吗?还是可以用另一个库来完成?
只需在 ImageMagick 中对图像进行阈值处理,即可将除黑色以外的所有颜色转换为白色。
convert rectangles.png -threshold 0 rectangles2.png
或者将除白色以外的所有颜色都变成白色
convert rectangles.png -fill white +opaque white rectangles3.png
或者只是将图像着色为白色
convert rectangles.png -fill white -colorize 100 rectangles4.png
我是不是理解错了你的问题?
如果您已经识别出所有颜色,但在您的代码中没有将它们转换为白色,那是因为某些颜色略有不同。因此,只需在您的第一个 -transparent 命令之前添加 -fuzz XX%。尝试 XX=0% 开始并根据需要增加。
添加:
我怀疑这就是你想要的。你很接近。您只需要添加一些模糊值。但是我没有让它透明,而是使用 opaque_fill().
直接转换为白色
输入:
from wand.image import Image
from wand.display import display
with Image(filename='color_rectangles.png') as img:
img.opaque_paint(target='#5f8bfc', fill='white', fuzz=0.30*img.quantum_range, invert=False)
img.opaque_paint(target='#43ad49', fill='white', fuzz=0.30*img.quantum_range, invert=False)
img.opaque_paint(target='#831d98', fill='white', fuzz=0.30*img.quantum_range, invert=False)
img.save(filename='color_rectangles_fill_white.png')
display(img)
请注意,可以使用低至 quantum_range 的 0.05 因子并改变大部分颜色,但由于绘制方框时的抗锯齿,您需要尽可能增加它以消除不改变其他颜色的轮廓。
What is missing in my script in order to get the same output as I get with ImageMagick?
您缺少 wand 相当于 -alpha extract
。只需添加 img.alpha_channel = 'extract'
,两个输出应该匹配。
with Image(filename='input.png') as img:
img.transparent_color('#4B8DF8', alpha=0.0)
img.transparent_color('#27A9E3', alpha=0.0)
img.transparent_color('#2295C9', alpha=0.0)
img.transparent_color('#E7191B', alpha=0.0)
img.transparent_color('#C91112', alpha=0.0)
img.transparent_color('#28B779', alpha=0.0)
img.transparent_color('#17A769', alpha=0.0)
img.transparent_color('#852B99', alpha=0.0)
img.transparent_color('#751E88', alpha=0.0)
img.transparent_color('#D84A38', alpha=0.0)
img.transparent_color('#B4CEF8', alpha=0.0)
img.transparent_color('#17A76A', alpha=0.0)
img.transparent_color('#CA1112', alpha=0.0)
img.transparent_color('#2296CA', alpha=0.0)
img.transparent_color('#DDE8FA', alpha=0.0)
img.alpha_channel = 'extract'
img.negate()
img.save(filename='out_python.png')
我正在尝试将下图中的某些矩形区域转换为白色或透明。
我可以通过以下命令使用 ImageMagick 实现它,它首先制作透明的所需颜色,最后使用“否定”将其余颜色转换为黑色。
convert input.png \
-transparent '#4B8DF8' \
-transparent '#27A9E3' \
-transparent '#2295C9' \
-transparent '#E7191B' \
-transparent '#C91112' \
-transparent '#28B779' \
-transparent '#17A769' \
-transparent '#852B99' \
-transparent '#751E88' \
-transparent '#D84A38' \
-transparent '#B4CEF8' \
-transparent '#17A76A' \
-transparent '#CA1112' \
-transparent '#2296CA' \
-transparent '#DDE8FA' \
-alpha extract -negate out_convert.png
我目前的 Python/Wand 脚本是这样的:
from wand.image import Image
with Image(filename='input.png') as img:
img.transparent_color('#4B8DF8', alpha=0.0)
img.transparent_color('#27A9E3', alpha=0.0)
img.transparent_color('#2295C9', alpha=0.0)
img.transparent_color('#E7191B', alpha=0.0)
img.transparent_color('#C91112', alpha=0.0)
img.transparent_color('#28B779', alpha=0.0)
img.transparent_color('#17A769', alpha=0.0)
img.transparent_color('#852B99', alpha=0.0)
img.transparent_color('#751E88', alpha=0.0)
img.transparent_color('#D84A38', alpha=0.0)
img.transparent_color('#B4CEF8', alpha=0.0)
img.transparent_color('#17A76A', alpha=0.0)
img.transparent_color('#CA1112', alpha=0.0)
img.transparent_color('#2296CA', alpha=0.0)
img.transparent_color('#DDE8FA', alpha=0.0)
img.negate()
img.save(filename='out_python.png')
下面我展示了我使用 convert
命令得到的输出(只有黑色和白色)和使用 python/wand
脚本的输出(除了黑色和白色它还有一些其他颜色)。
为了获得与 ImageMagick 相同的输出,我的脚本中缺少什么? Wand 是一个很好的 python 库吗?还是可以用另一个库来完成?
只需在 ImageMagick 中对图像进行阈值处理,即可将除黑色以外的所有颜色转换为白色。
convert rectangles.png -threshold 0 rectangles2.png
或者将除白色以外的所有颜色都变成白色
convert rectangles.png -fill white +opaque white rectangles3.png
或者只是将图像着色为白色
convert rectangles.png -fill white -colorize 100 rectangles4.png
我是不是理解错了你的问题?
如果您已经识别出所有颜色,但在您的代码中没有将它们转换为白色,那是因为某些颜色略有不同。因此,只需在您的第一个 -transparent 命令之前添加 -fuzz XX%。尝试 XX=0% 开始并根据需要增加。
添加:
我怀疑这就是你想要的。你很接近。您只需要添加一些模糊值。但是我没有让它透明,而是使用 opaque_fill().
直接转换为白色输入:
from wand.image import Image
from wand.display import display
with Image(filename='color_rectangles.png') as img:
img.opaque_paint(target='#5f8bfc', fill='white', fuzz=0.30*img.quantum_range, invert=False)
img.opaque_paint(target='#43ad49', fill='white', fuzz=0.30*img.quantum_range, invert=False)
img.opaque_paint(target='#831d98', fill='white', fuzz=0.30*img.quantum_range, invert=False)
img.save(filename='color_rectangles_fill_white.png')
display(img)
请注意,可以使用低至 quantum_range 的 0.05 因子并改变大部分颜色,但由于绘制方框时的抗锯齿,您需要尽可能增加它以消除不改变其他颜色的轮廓。
What is missing in my script in order to get the same output as I get with ImageMagick?
您缺少 wand 相当于 -alpha extract
。只需添加 img.alpha_channel = 'extract'
,两个输出应该匹配。
with Image(filename='input.png') as img:
img.transparent_color('#4B8DF8', alpha=0.0)
img.transparent_color('#27A9E3', alpha=0.0)
img.transparent_color('#2295C9', alpha=0.0)
img.transparent_color('#E7191B', alpha=0.0)
img.transparent_color('#C91112', alpha=0.0)
img.transparent_color('#28B779', alpha=0.0)
img.transparent_color('#17A769', alpha=0.0)
img.transparent_color('#852B99', alpha=0.0)
img.transparent_color('#751E88', alpha=0.0)
img.transparent_color('#D84A38', alpha=0.0)
img.transparent_color('#B4CEF8', alpha=0.0)
img.transparent_color('#17A76A', alpha=0.0)
img.transparent_color('#CA1112', alpha=0.0)
img.transparent_color('#2296CA', alpha=0.0)
img.transparent_color('#DDE8FA', alpha=0.0)
img.alpha_channel = 'extract'
img.negate()
img.save(filename='out_python.png')