python - 用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 年的数据。这就是为什么我想让它在时间和空间方面尽可能高效。
解决方案
如果我正确理解了这个问题,您可以使用 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
不是。
推荐阅读
- c# - 如何解决 Visual Studio 2019 com 中的错误 MSB3644。版?
- docker - 在 AzDo 中为 2 个单独的项目/存储库构建/发布管道的最佳方法
- php - 尝试从 API 中获取由空格分隔的两个单词值的候选对象时查询失败
- excel - Selenium Basic VBA 将日期从网页复制到 Excel 随机交换日期和月份
- r - 如何替换矢量整理器
- clion - 使用 CLion 时 optix 和 cuda 的问题
- python - 导入请求在 Python 中修改后的 GCP 云函数中不起作用
- python - 每 X 行按百分比增加列
- python - 从日期列中提取月份的天数,返回当前月份的日期
- sql - PostgreSQL,如何解决用作表达式的子查询返回的多行错误