Слой изображения с непрозрачностью поверх другого изображения. - OpenCV

редактировать

Кто-нибудь с подобной проблемой - я нашел другой ответ SOВот с отличным решением на Python, которое использует скорость NumPy.

Пожалуйста, рассмотрите следующую проблему:

У меня есть два изображения, оба одинакового размера. Один из них - красный квадрат с непрозрачными слоями:

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

Я использую привязки Python OpenCV для этого проекта и до сих пор (после прочтения водяных знаковВот У меня есть это:

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)

Который производит следующий вывод:

Однако желаемый эффект:

Теперь я понимаю, что используя взвешенное сложение, я использую 0,5 каждого, когда мне действительно нужно 1,0 каждого, однако, когда я пытаюсь увеличить вес обоих, увеличивается только один, а другой уменьшается.

Если у кого-то есть понимание того, как я могу достичь этого, предпочтительно в Python, но если вы знаете способ в C ++, я уверен, что смогу воспроизвести его.

Благодарю.

Ответы на вопрос(1)

Ваш ответ на вопрос