Я работаю над проектом сегментации изображений.
У меня есть 2 изображения RGBA. Первое изображение - это изображение для сегмента:
Второе изображение - это изображение с красными квадратами с различным значением прозрачности:
Я хотел бы наложить 2 изображения, но я не могу этого сделать. Я попробовал 2 метода:
Один с помощью метода openCV «add», а другой с помощью метода «PIL» blend.
from PIL import Image as PImage
if __name__ == '__main__':
image_A = read_image(r"C:\Users\francois.bock\Desktop\013.jpg", rgb=True)
# Add alpha channel
image_A = np.concatenate((image_A, np.full((256, 256, 1), fill_value=255, dtype=np.uint8)), axis=2)
#Create image B
image_B = np.full((256, 256, 4), fill_value=[0, 0, 0, 0], dtype=np.uint8)
for i in range(0, 20):
for j in range(0, 20):
image_B[i, j] = [255, 0, 0, 100]
for i in range(50, 70):
for j in range(50, 70):
image_B[i, j] = [255, 0, 0, 127]
for i in range(50, 70):
for j in range(0, 20):
image_B[i, j] = [255, 0, 0, 255]
image_A_convert = PImage.fromarray(image_A)
image_B_convert = PImage.fromarray(image_B)
# Test with blend
img_add = PImage.blend(image_A_convert, image_B_convert, 0.0)
img_add.save("testrgba.png", "PNG")
# Test with open CV
img_add = cv2.add(image_A,image_B)
img_add = PImage.fromarray(img_add)
img_add.save("testrgba.png", "PNG")
Результат с blend:
Результат с открытым CV
Как мы видим, это не очень хорошо работает.
При использовании метода наложения первое изображение стало слишком блеклым. При использовании метода openCV с первым изображением все в порядке, но мы потеряли указатель прозрачности c для каждого квадрата второго изображения.
Я бы хотел сохранить одно и то же первое изображение, но с указанием прозрачности c для каждого квадрат второго изображения.
Есть подсказки или подсказка?