首页 > 解决方案 > 用numpy数组中的整数替换某些像素

问题描述

我用一张图片为自己制作了一个 numpy 数组

from PIL import Image
import numpy as np

image = Image.open(file)
np.array(image)

它的形状是(6000, 6000, 4),在那个数组中我想用一个数字替换像素值可以说这个绿色像素[99,214,104,255]将是1。我只有 4 个这样的像素我想用一个数字替换,所有其他像素都是0. 是否有一种快速有效的方法可以做到这一点,以及最小化数据大小的最佳方法是什么。将其另存为dict(),键在哪里x,y,值在哪里,会更好integers吗?还是将整个数组保存为它所具有的形状更好?我只需要颜色值,其余的对我来说并不重要。

我需要尽快处理这样的图片,因为每 5 分钟就有一张图片,假设我想存储 1 年的数据。这就是为什么我想让它在时间和空间方面尽可能高效。

标签: pythonimagenumpypython-imaging-librarynumpy-ndarray

解决方案


如果我正确理解了这个问题,您可以使用 np.where :

>>> arr = np.array(image)
>>> COLOR = [99,214,104,255]
>>> np.where(np.all(arr == COLOR, axis=-1), 1, 0)

这将产生一个 6000*6000 的数组,1如果像素是选定的颜色,或者0不是。


推荐阅读