Замена пикселей на изображении Matplot - PullRequest
0 голосов
/ 17 декабря 2018

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

  1. NDArray * Исходное изображение
  2. Маска предсказания.

Я хотел бы "заштриховать" областигде маска не 6 например

Для простоты я вставил их ниже в виде крошечных изображений 3х3, где каждая ячейка представляет собой значение RGB пикселя

Оригинал

[
    [1,1,1], [1,5,1], [1,1,1]
    [3,3,3], [3,3,3], [3,3,3]
    [1,1,1], [5,2,1], [1,1,1]
]

Предсказание

[
    [0, 0, 0]
    [6, 6, 6]
    [1, 2, 3]
]

Для этого я просто повторяю предсказание и заменяю ячейки в оригинале на [0,0,0], чтобы зачеркнуть те, которые я не делаю 't *

for rowIndex, predictedPointRow in enumerate(predict):
    for colIndex, predPoint in enumerate(predictedPointRow):
        if predPoint is not 6:
            img[rowIndex][colIndex] = [0, 0, 0]

Это болезненно медленно.Есть ли лучший способ сделать это?

Спасибо,

Ответы [ 2 ]

0 голосов
/ 17 декабря 2018

Вы можете использовать Булевы или индексные массивы «маски» :

mask = (predict != 6)   # create a 2D boolean array, which can be used for indexing
img[mask] = [0,0,0]
0 голосов
/ 17 декабря 2018

Вы могли бы сделать что-то вроде

img = np.array([[[1,1,1], [1,5,1], [1,1,1]],[[3,3,3], [3,3,3], [3,3,3]],[[1,1,1], [5,2,1], [1,1,1]]])
predict = np.array([[0,0,0],[6,6,6],[1,2,3]])
img[predict!=6] = [0,0,0]
...