【发布时间】:2022-01-04 12:11:52
【问题描述】:
我有两张图片。在一个图像中,通过以RGBA 图像格式编辑通道A,将白色像素设置为透明(或无色)。假设这个图像名称是image_rgba.png,另一个图像是image.jpg。现在,我想使用以下 python 代码将image_rgba.png 图像放在image.jpg 的特定位置
import cv2
import numpy as np
import matplotlib.pyplot as plt
image = cv2.imread('image.jpg')
label = cv2.imread('image_rgba.png')
label = cv2.cvtColor(label, cv2.COLOR_BGR2RGBA)
new_image = image.copy()
new_image = cv2.cvtColor(new_image, cv2.COLOR_BGR2RGBA)
new_image[200:290, 300:384, :] = label
当我写这个图像时,image_rgba.png 的无色边缘在输出图像中被设置为白色(下图中绿色框的白色边缘)。
我希望绿色框标签的白色边缘不显示,而是显示在该像素中的背景图像。我找到了similar 问题,但它并不能帮助我解决我的问题。如果有人可以帮助我,我将不胜感激。
【问题讨论】:
-
好问题。像这样简单的任务真的可以让 OpenCV 陷入困境。花了 1 小时搜索重复项,但没有一个该死的答案解释了如何合并具有不同大小的 alpha 通道的 JPG 和 PNG。
-
@DanMašek:几乎恕我直言。但它不考虑不同大小的图像
-
顺便说一句,这些问题每隔一周出现一次,并且有足够高质量的答案,绝对应该作为其中任何一个的副本关闭。只需寻找“叠加”、“透明度”……并注意那些仅使用 Alpha 通道作为蒙版而不是正确相乘的解决方案。
addWeighted总是错误的,因为它的权重是标量,而不是图片。