Используйте массив x, y в качестве индексов в массиве изображений

У меня есть изображение:

>> 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

Что я делаю неправильно?

Структурированный массив Numpy
Структурированный массив Numpy
Однако в реальных проектах я чаще всего имею дело со списками, состоящими из нескольких типов данных. Как мы можем использовать массивы numpy, чтобы...
1
0
121
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Это работает, но действительно уродливо:

# 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 

Другие вопросы по теме