Camada de imagem com opacidade por cima de outra imagem. - OpenCV

Editar

Qualquer pessoa com um problema semelhante - encontrei outra resposta SOaqui com uma ótima solução python que explora a velocidade do NumPy.

Por favor, considere o seguinte problema:

Eu tenho duas imagens, ambas do mesmo tamanho. Um é um quadrado vermelho com várias camadas de opacidade:

E um segundo, um quadrado azul, menor que o vermelho, sem opacidade, mas branco ao redor.

Estou usando as ligações python do OpenCV para este projeto e até agora (depois de ler sobre marcas d'águaaqui Eu tenho isto:

redSquare = cv2.imread('redSquare.png', cv2.IMREAD_UNCHANGED)
(rH, rW) = redSquare.shape[:2]

blueSquare = cv2.imread('blueSquare.png')
(h, w) = blueSquare.shape[:2]

blueSquare = np.dstack([blueSquare, np.ones((h,w), dtype = 'uint8') * 255])
overlay = np.zeros((h,w,4), dtype = 'uint8')
overlay[0:rH, 0:rW] = redSquare
output = blueSquare .copy()
cv2.addWeighted(overlay, 0.5, output, 0.5, 0, output)

cv2.imwrite('imageAdded.png', output)

Que produz a seguinte saída:

No entanto, o efeito desejado é:

Agora eu entendo usando adição ponderada, estou usando 0,5 de cada um, quando realmente quero 1,0 de cada, no entanto, quando tento aumentar o peso de ambos, apenas um aumenta e o outro diminui.

Se alguém tiver alguma idéia de como eu posso conseguir isso, de preferência em Python, mas se você souber uma maneira em C ++, tenho certeza de que posso replicá-la.

Obrigado.

questionAnswers(1)

yourAnswerToTheQuestion