У меня есть изображение:
>> img.shape
(720,1280)
Я определил набор координат x, y, которые я хотел бы, где они верны, установить значение соответствующего изображения равным 255.
Вот что я имею в виду. Формирование индексов - моя vals
:
>>> vals.shape
(720, 2)
>>> vals[0]
array([ 0, 186]) # the x is 0, the y is 186, I'd like to set value at img[0][186]=255
>>> vals[719]
array([719, 207]) # the x is 719, the y is 207, I'd like to set value at img[719][207]=255
Первое измерение vals
избыточно с range(719)
.
Я начинаю с создания изображения той же формы, что и img:
>>> out = np.zeros_like(img)
>>> out.shape
(720, 1280)
Но отсюда мой индекс в out
, кажется, не работает:
>>> out[vals] = 255
>>> out.shape
(720, 1280)
>>> out
array([[255, 255, 255, ..., 255, 255, 255],
[255, 255, 255, ..., 255, 255, 255],
[255, 255, 255, ..., 255, 255, 255],
>>> out.min()
255
Это делает /все/ out
значения 255, а не только те, где есть индексы out == vals
.
Я ожидал:
>>> out[0][0]
0
>>> out[0][186]
255
>>> out[719][207]
255
Что я делаю неправильно?
Это работает, но действительно уродливо:
# out[(vals[:][:,0],vals[:][:,1])]=255
out[(vals[:,0],vals[:,1])]=255
Есть ли что-то лучше?
Я думаю, это должно помочь:
import numpy as np
img = np.random.rand(100, 200) # sample image, e.g. grayscaled.
where_to_change = [(20,10), (3, 4)] # in (x, y)-fashion
#So, you need to set: `img[20, 10] = 1`, `img[3, 4]= 1` etc....
img[list(zip(*where))] = 1