Использование OpenCV Python, как бы вы сделали все черные пиксели прозрачными, а затем наложили поверх исходного изображения

Я пытаюсь сделать цветную маску, белую. И моя идея:

  • сделать черные пиксели прозрачными в маске
  • объединить два изображения
  • обрезать изображения

тогда моя оригинальная скрытая область будет белой. Какой код/​​методы Python OpenCV мне понадобится?

Так же:

Оригинал

Original

Маска

Mask

Желаемый результат (высмеивается - нет зеленых краев)

Desired result (mocked up - no green edges)

Вместо

Instead of

Ответы

Ответ 1

Я предполагаю сделать порог цвета, чтобы получить маску. В результате я получил первую быструю и грязную попытку с Hue 43-81, Saturation 39-197 и Brightness от 115-255: enter image description here

Следующий шаг - это полный алгоритм заполнения, чтобы заполнить внутреннюю часть маски. Обратите внимание, что также выбрана одна небольшая область справа.

enter image description here

Следующий шаг - это выражение двух результатов (mask-filled_mask):

enter image description here

Снова заполните целостности и избавьтесь от шумных пикселей с двоичным открытием:

enter image description here

Последняя маска изображения с созданной маской.

enter image description here

Каждый шаг может быть скорректирован для получения оптимальных результатов. Хорошая идея - попробовать выполнить шаги (например, с помощью imageJ), чтобы настроить рабочий процесс, а затем script шаги в python/openCV.

Обратитесь также к http://fiji.sc/Segmentation.

Ответ 2

Я предполагаю, что ваша маска является логическим массивом numpy, а ваши 2 изображения - массивами numpy image1 и image2.

Затем вы можете использовать булевский массив как множитель.

overlay= mask*image1 + (-mask)*image2

Итак, вы получаете "True" пиксели от image1 и False пиксели от image2