我有一张图片,由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。
我不知道如何正确地调用它,但我相信应该有一些众所周知的数学程序。
答案 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)