Есть изображение opencv, которое я разделил на 3 канала:
image #opencv image
img_red = image[:, :, 2]
img_green = image[:, :, 1]
img_blue = image[:, :, 0]
Далее три фильтра:
red_filter
green_filter
blue_filter
Все они представляют собой пустые массивы, но в основном заполнены нулями, поэтому формат выглядит примерно так:
[0, 0, 0, 132, ... 0, 15, 0, 230, 0]
...
[32, 0, 5, 0, ... 0, 2, 150, 0, 0]
Я хотел бы использовать каждое ненулевое значение в этих фильтрах, чтобы перезаписать один и тот же индекс в каналах.
Что-то вроде этого:
img_red[index] = red_filter[index] if red_filter != 0
img_green[index] = green_filter[index] if green_filter != 0
img_blue[index] = blue_filter[index] if blue_filter != 0
final_img = cv2.merge(img_red, img_green, img_blue)
Например, если бы канал выглядел так:
[44, 225, 43, ... 24, 76, 56]
И фильтр:
[0, 0, 25 ... 2, 0, 91]
Тогда результат должен быть:
[44, 225, 25 ... 2, 76, 91]
Я пытался использовать циклы for и списки, но этот код нужно было бы запускать для каждого кадра в видео, поэтому мне интересно, есть ли более быстрый способ добиться того же результата.
Есть ли какая-то фильтрация изображений в opencv или операция numpy, которая эффективно выполняла бы этот процесс?