@JRBRO

Как наложить одно изображение на другое без размытия, смешивания и прозрачности?

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

Задача просто наложить png на png. Как такое сделать?

import cv2 as cv
import sys

img1 = cv.imread(sys.argv[1])
img2 = cv.imread(sys.argv[2])

background = img1
overlay = img2

added_image = cv.addWeighted(background,0.4,overlay,0.1,0)

cv.imshow('combined.png', added_image)
cv.waitKey(0)


import cv2
import sys
img1 = cv2.imread(sys.argv[1])
img2 = cv2.imread(sys.argv[2])
dst = cv2.add(img1,img2)

cv2.imshow('Combin',dst)

cv2.waitKey(0)
cv2.destroyAllWindows()


Такие варианты не работают

Задача просто наложить маску в виде пнг поверх другого пнг
  • Вопрос задан
  • 762 просмотра
Решения вопроса 1
Vindicar
@Vindicar
RTFM!
Если нужно заменить прямоугольник пикселей, то это делается тривиально:
img1[top1:bottom1, left1:right1] = img2[top2:bottom2, left2:right2]

Единственное требование - прямоугольники должны иметь одинаковый размер.
Как следствие, если вторая картинка может заезжать за край первой, то задача усложняется.

Если же нужно работать с альфа-каналом, то для начала его неплохо бы прочитать.
image = cv2.imread('image.png', cv2.IMREAD_UNCHANGED)

UNCHANGED не преобразует в BGR, а грузит как есть, в том числе альфа канал.
И тогда нужно будет сделать что-то типа
mask = image[..., 3] > 0  # если считаем, что чем меньше - тем прозрачнее
background[top:bottom, left:right][mask] = image[mask]  # не забываем про равенство размера!
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы