我正在尝试修剪图像的整个行,除了白色以外,什么都没有。
我尝试使用matplot lib
将图像转换为矩阵,并查看(r,g,b)=(0,0,0)或(1,1,1),如果每个(r,g,b )在行中属于此类
矩阵看起来像[[[[r,g,b],[r,g,b] ....]],....,[[r,g,b],[r,g,b ] ....]]]
我达到了我的要求,但是我运行了大约500张图像,大约需要30分钟。我可以用更好的方法吗?
,所需的图片应该像
编辑1 : 尝试使用魔杖包装中的修剪方法
with wand_img(filename=path) as i:
# i.trim(color=Color('white'))
# i.trim(color=Color('white'))
i.trim()
i.trim()
i.save(filename='output.png')
但不适用于以下类型的images
答案 0 :(得分:3)
您可以使用 ImageMagick ,它已安装在大多数Linux发行版中,并且可用于macOS和Windows。
要修剪一个图像,请启动终端(或Windows中的命令提示符)并运行:
magick input.png -fuzz 20% -trim result.png
这将为您提供-尽管我添加了黑色边框,以便您可以看出其范围:
如果您有很多事情要做,可以与 GNU Parallel 并行执行,如下所示:
parallel -X magick mogrify -trim ::: *png
我制作了1000张图像,并在MacBook Pro上在4秒内完成了全部工作。
如果您没有 GNU Parallel ,则可以在12秒内完成1000张图像,如下所示:
magick mogrify -trim *png
如果要使用Python进行操作,可以尝试执行以下操作:
#!/usr/bin/env python3
from PIL import Image, ImageChops
# Load image and convert to greyscale
im = Image.open('image.png').convert('L')
# Invert image and find bounding box
bbox = ImageChops.invert(im).getbbox()
# Debug
print(*bbox)
# Crop and save
result = im.crop(bbox)
result.save('result.png')
它提供与 ImageMagick 版本相同的输出。我建议您使用线程工具并行执行很多操作以获得最佳性能。
顺序版本花费1000秒图像需要65秒,而多处理版本需要1000张图像需要14秒。
答案 1 :(得分:2)
在Imagemagick 6.9.10.25 Q16中使用两个修剪Mac OSX Sierra对我来说很好用。您的图像右侧有一个黑条。第一次修剪将删除它。第二次修剪将去除剩余的多余白色。您可能需要为修剪添加一些绒毛(公差)量。但是我不需要它。
输入:
convert img.png -trim +write tmp1.png -trim result.png
第一次修剪的结果(tmp1.png)
第二次修剪后最终结果:
添加:
查看Python魔杖的文档:
trim(*args, **kwargs)
Remove solid border from image. Uses top left pixel as a guide by default, or you can also specify the color to remove.
Parameters:
color (Color) – the border color to remove. if it’s omitted top left pixel is used by default
fuzz (numbers.Integral) – Defines how much tolerance is acceptable to consider two colors as the same.
您将需要为第一个修剪指定color = black,因为此版本的修剪使用左上角进行修剪。命令行Imagemagick到处都是。如果失败,则添加一些模糊值。