Как наложить маскированную часть изображения на новое изображение? - PullRequest
3 голосов
/ 16 мая 2019

Мне очень жаль за этот основной вопрос, но я новичок в OpenCV и обработке изображений в целом, и не могу понять это после того, как немного покопался.

Вот что я пытаюсь сделать:

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

Original image

Я создал двоичную маску из этого с прозрачной областью, являющейся черным, и объектом, являющимся белым:

Binary mask

Теперь у меня есть другое изображение, похожее на это, с такими же размерами:

Patterned image

Теперь я хочу наложить белую замаскированную часть из первого изображения (фактического объекта) на это изображение. Как мне это сделать?

Ответы [ 2 ]

2 голосов
/ 16 мая 2019

Вот один из способов сделать это:

import cv2

# Load images
bg     = cv2.imread('bg.png')                                                                 
object = cv2.imread('object.png')                                                         
mask   = cv2.imread('mask.png')                                                             

# Zero background where we want to overlay
bg[mask>0]=0                                                                              

# Add object to zeroed out space
bg += object*(mask>0)                                                                     

cv2.imwrite('result.png',bg)  

enter image description here

2 голосов
/ 16 мая 2019

Используя тот факт, что у нас под рукой есть массивы, мы можем сначала расширить маску до трех измерений:

mask = np.dstack([(mask > 0)]*3) # original mask is cv 255 mask
mask = np.dstack([mask]*3) # original mask is already boolean

А затем скопируйте изображение поверх маски:

np.copyto(background, foreground, where=mask)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...