Перезапись пикселей в массиве - PullRequest
0 голосов
/ 05 октября 2019

У меня есть изображение, которое я пытаюсь заменить пикселями на произвольный цвет (скажем, синий). Как я могу сделать это с массивом. Например, мое изображение:

a b c d e
f g h i j
k l m n o
p q r s t
u v w x y

И я хочу изменить цвет столбцов 3,2,3,4,3, чтобы мое изображение стало что-то вроде

a b c * e
f g * i j
k l m * o
p q r s *
u v w * y

, где* - замененный пиксель с синим. Как можно это сделать?

1 Ответ

1 голос
/ 06 октября 2019

Поскольку вы не указали никаких ограничений, я предполагаю, что с любым инструментом все в порядке, поэтому я предлагаю использовать Подушка . (Установите с помощью pip install Pillow)

Скажите, что ваше изображение названо image.png, затем вы можете перебрать пиксели, которые хотите отредактировать, и установить цвет в каждой позиции на нужный цвет.

from PIL import Image

replacement_color = (0, 0, 255)
columns = [3, 2, 3, 4, 3]
positions = [(x, y) for y, x in enumerate(columns)]

image = Image.open('image.png')
pixels = image.load()

for (x, y) in positions:
    pixels[x, y] = replacement_color

image.show() # or image.save('transformed_image.png')

Имейте в виду, что такой подход к доступу и редактированию отдельных пикселей может быть очень медленным.


РЕДАКТИРОВАТЬ:

Использование логического массива numpy в качествемаску для определения правильных пикселей вы также можете использовать

import numpy as np
from PIL import Image

image = Image.open('image.png')
image_array = np.array(image)

# Just an example mask
diagonal = np.eye(image_array.shape[0], image_array.shape[1])
mask = diagonal == 1

image_array[mask] = [0, 0, 255, 0] # RGBA

altered_image = Image.fromarray(image_array)
altered_image.save('altered_image.png')

(адаптировано из данного руководства )

Я не уверен, если производительность будет лучше.

...