Наложение двух изображений с cv2 приводит к шуму - PullRequest
1 голос
/ 05 ноября 2019

Я пытаюсь смешать 3 изображения.

  1. Сначала я накладываю photo.png over base.png с некоторым позиционированием. И это работает.

base_photo.png

Во-вторых, я пытаюсь наложить effect.png

effect.png

поверх результирующего изображения из предыдущего шага.

Результат выглядит следующим образом

result.png

Я использую смешивание opencv, описанное здесь . Я пытался использовать cv2.addWeighted, но результат был тот же

# blending function
def img_overlay(background, overlay, x_offset, y_offset):
    y1, y2 = y_offset, y_offset + overlay.shape[0]
    x1, x2 = x_offset, x_offset + overlay.shape[1]

    alpha_s = overlay[:, :, 3] / 255.0
    alpha_l = 1.0 - alpha_s

    for c in range(0, 3):
        background[y1:y2, x1:x2, c] = (alpha_s * overlay[:, :, c] +
                                   alpha_l * background[y1:y2, x1:x2, c])

    return background

# First step
background = cv2.imread('base.png')
overlay = cv2.imread('photo.png', -1)
x_offset = 386
y_offset = 70
base_photo = img_overlay(background, overlay, x_offset, y_offset)

# Second step
overlay = cv2.imread('effect.png', -1)
final_photo = img_overlay(base_photo, overlay, 0, 0)

cv2.imwrite(result, final_photo) 

Как я могу исправить функцию img_overlay, чтобы она правильно перекрывала effect.png? 1039 *

1 Ответ

0 голосов
/ 05 ноября 2019

Проблема в том, что ваше изображение эффекта находится в другом масштабе. Исправьте это, разделив на 255.

Ваш «Второй шаг» должен выглядеть следующим образом:

# Second step
overlay = cv2.imread('effect.png', -1)
overlay = overlay / 255.0
final_photo = img_overlay(base_photo, overlay, 0, 0)

Что работает для меня.

...