Используйте массив x, y в качестве индексов в массиве изображений - PullRequest
0 голосов
/ 10 апреля 2019

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

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

Это делает / all / out значения 255, а не только те, где индексыиз out == vals.

Я бы ожидал:

>>> out[0][0]
0

>>> out[0][186]
255

>>> out[719][207]
255

Что я делаю не так?

Ответы [ 2 ]

0 голосов
/ 10 апреля 2019

Я думаю, что это должно помочь:

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 
0 голосов
/ 10 апреля 2019

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

# out[(vals[:][:,0],vals[:][:,1])]=255
out[(vals[:,0],vals[:,1])]=255

Что-то лучше?

...