Как заменить часть изображения белым окном? - PullRequest
0 голосов
/ 28 мая 2018

Я беру RGB-изображение в качестве ввода в Python, которое оно, очевидно, преобразует в двумерный массив.Я хотел бы заменить только окно / часть изображения, сделав его полностью белым (или заменив его двумерным массивом со значениями только 255).

Вот что я пробовал:

img[i:i+r,j:j+c] = (np.ones(shape=(r,c))) * 255

r, c - мой размер окна (128 * 128), и мое входное изображение имеет канал RGB.Выдает ошибку:

ValueError: could not broadcast input array from shape (128,128) into shape (128,3)

Примечание: Я бы хотел, чтобы мое окончательное выходное изображение было в канале RGB с конкретными частями, замененными белыми окнами.Я использую Python 3.5.

1 Ответ

0 голосов
/ 29 мая 2018

Вы можете сделать это следующим образом:

#!/usr/local/bin/python3
import numpy as np
from PIL import Image

# Numpy array containing 640x480 solid blue image
solidBlueImage=np.zeros([480,640,3],dtype=np.uint8)
solidBlueImage[:]=(0,0,255)

# Make a white window
solidBlueImage[20:460,200:600]=(255,255,255)

# Save as PNG
img=Image.fromarray(solidBlueImage)
img.save("result.png")

enter image description here

По сути, мы используем индекс с нуля для рисования поверх изображения.


Или вот так:

#!/usr/local/bin/python3
import numpy as np
from PIL import Image

# Numpy array containing 640x480 solid blue image
solidBlueImage=np.zeros([480,640,3],dtype=np.uint8)
solidBlueImage[:]=(0,0,255)

# Make a white array
h,w=100,200
white=np.zeros([h,w,3],dtype=np.uint8)
white[:]=(255,255,255)

# Splat white onto blue
np.copyto(solidBlueImage[20:20+h,100:100+w,],white)

# Save as PNG
img=Image.fromarray(solidBlueImage)
img.save("result.png")

enter image description here

По сути, мы используем numpy's copyto() для вставки, (илисоставной или оверлей), одно изображение в другое.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...