Capa de imagen con opacidad sobre la parte superior de otra imagen. – OpenCV

Editar

Cualquiera con un problema similar: encontré otra respuesta SO aquí con una gran solución de Python que explota la velocidad de NumPy.

Por favor considere el siguiente problema:

Tengo dos imágenes, ambas del mismo tamaño. Uno es un cuadrado rojo con diferentes capas de opacidad:

introduzca la descripción de la imagen aquí

Y un segundo, un cuadrado azul, más pequeño que el rojo, sin opacidad, pero blanco que lo rodea.

introduzca la descripción de la imagen aquí

Estoy usando los enlaces python de OpenCV para este proyecto y hasta ahora (después de leer sobre marcas de agua aquí tengo esto:

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 produce el siguiente resultado: introduzca la descripción de la imagen aquí

Sin embargo el efecto deseado es: introduzca la descripción de la imagen aquí

Ahora comprendo que con el uso de sums ponderadas, estoy usando 0.5 de cada una, cuando realmente quiero 1.0 de cada una, sin embargo, cuando bash boost la ponderación de ambas, solo una aumenta y la otra disminuye.

Si alguien tiene alguna idea de cómo puedo lograr esto, preferiblemente en Python, pero si conoce una forma en C ++, estoy seguro de que puedo replicarlo.

Gracias.

Aquí está el código C ++ da exactamente el resultado que desea.

 // http://jepsonsblog.blogspot.be/2012/10/overlay-transparent-image-in-opencv.html // http://sofes.miximages.com/python/082f8939edb6aed7ba0a ",IMREAD_UNCHANGED); Mat underlay = imread("CtBAe.png",IMREAD_UNCHANGED); if( underlay.empty() || overlay.empty() ) { return -1; } overlayImage( &underlay, &overlay, Point() ); imshow("underlay result",underlay); waitKey(); return 0; }