使用python替换图像中的白色行

时间:2019-01-30 17:36:39

标签: python matplotlib image-processing python-imaging-library

我正在尝试修剪图像的整个行,除了白色以外,什么都没有。

我尝试使用matplot lib

  1. 将图像转换为矩阵,并查看(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分钟。我可以用更好的方法吗?

actual image

,所需的图片应该像

required output

编辑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

2 个答案:

答案 0 :(得分:3)

您可以使用 ImageMagick ,它已安装在大多数Linux发行版中,并且可用于macOS和Windows。

要修剪一个图像,请启动终端(或Windows中的命令提示符)并运行:

magick input.png -fuzz 20% -trim result.png

这将为您提供-尽管我添加了黑色边框,以便您可以看出其范围:

enter image description here

如果您有很多事情要做,可以与 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对我来说很好用。您的图像右侧有一个黑条。第一次修剪将删除它。第二次修剪将去除剩余的多余白色。您可能需要为修剪添加一些绒毛(公差)量。但是我不需要它。

输入:

enter image description here

convert img.png -trim +write tmp1.png -trim result.png

第一次修剪的结果(tmp1.png)

enter image description here

第二次修剪后最终结果:

enter image description here

添加:

查看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到处都是。如果失败,则添加一些模糊值。