5

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

在此处输入图像描述

从上图中,将有 10 个单独的图像,每个图像都包含一个数字。提前致谢。

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

在此处输入图像描述

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

4

1 回答 1

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)]
于 2012-10-11T10:02:01.543 回答