使用PIL自动裁剪图像

时间:2012-10-11 06:09:14

标签: python image-processing image-manipulation python-imaging-library crop

我的文件夹中包含至少包含4张较小图像的图像。我想知道如何使用Python PIL剪掉较小的图像,以便它们都作为独立的图像文件存在。幸运的是有一个常数,背景是白色或黑色所以我猜我需要的是通过搜索行或最好是完全黑色或完全白色的列来切割这些图像的方法。这是一个示例图像:

enter image description here

从上图中可以看到10个单独的图像,每个图像都包含一个数字。提前谢谢。

编辑:我有另一个样本图像更真实,因为某些较小图像的背景颜色与它们所包含图像的背景颜色相同。例如

enter image description here

其输出为13个单独的图像,每个图像包含1个字母

1 个答案:

答案 0 :(得分:1)

使用scipy.ndimage进行标记:

import numpy as np
import scipy.ndimage as ndi
import Image

THRESHOLD = 100
MIN_SHAPE = np.asarray((5, 5))

filename = "eQ9ts.jpg"
im = np.asarray(Image.open(filename))
gray = im.sum(axis=-1)
bw = gray > THRESHOLD
label, n = ndi.label(bw)
indices = [np.where(label == ind) for ind in xrange(1, n)]
slices = [[slice(ind[i].min(), ind[i].max()) for i in (0, 1)] + [slice(None)]
          for ind in indices]
images = [im[s] for s in slices]
# filter out small images
images = [im for im in images if not np.any(np.asarray(im.shape[:-1]) < MIN_SHAPE)]