简化图像的numpy数组表示

时间:2016-10-06 14:04:30

标签: python arrays image numpy image-processing

我有一张图片,由PIL读入np.array。 就我而言,它是(1000, 1500) np.array

我希望将其简化以用于可视化目的。 通过简化,我遵循从这个矩阵的转换

1 1 1 1 0 0
1 0 1 0 0 0 

1 1 0

所以,基本上,看看每个2*2样本,如果它满足某些标准,例如超过50%的1 - >将其计为1,否则,计数为0。

我不知道如何正确地调用它,但我相信应该有一些众所周知的数学程序。

2 个答案:

答案 0 :(得分:1)

使用np.reshape()np.sum(array)axis参数的组合。:

import numpy as np
a = np.array([[1, 1, 1, 1, 0, 0], [1, 0, 1, 0, 0, 0]])
a = np.reshape(a, (a.shape[0]/2, 2, a.shape[1]/2, 2))
a = np.sum(a, axis=(1, 3)) >= 2

重新整形将数组分组为小的2x2块(orginals轴长度必须是2的倍数),然后沿创建的轴使用sum来检查组中的至少4个值是否为1。

有关类似问题,请参阅Computing average for numpy array

答案 1 :(得分:1)

您可以使用PIL.Image.fromarray将图片转换为PIL,然后resize或将该图片转换为所需尺寸的thumbnail。一个好处是可以轻松保存到文件,绘制到画布或显示以进行调试。只知道数字类型和图像模式(我常常陷入陷阱)。

通过以下方式创建图像:

from PIL import Image
image = Image.fromarray(arr).astype(np.uint8) #unsigned bytes for 8-bit grayscale
smallerImage = image.resize(desired_size, resample=Image.BILINEAR) #resize returns a copy thumbnail modifies in place

将图像恢复为numpy数组非常简单:np.array(image.getdata()).reshape(image.size)