Заменить определенные пиксели на целые числа в массиве numpy - PullRequest
2 голосов
/ 06 февраля 2020

Я сделал массив 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 год. Вот почему я хотел бы сделать его максимально эффективным во времени и пространстве.

Ответы [ 2 ]

1 голос
/ 06 февраля 2020

Если я правильно понимаю вопрос, вы можете использовать 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 если нет.

0 голосов
/ 06 февраля 2020

Как насчет простого хранения в database: position и value пикселей, которые вы хотите изменить, shape image, dtype массива и extension (jpg, et c ...). Вы можете использовать эту информацию для создания нового изображения из массива, заполненного 0.

...