Python 加载具有透明背景的图像 我试过的
我试着装这个 在python中使用opencv的图像,如您所见,该图像将在此处作为png加载,而不使用alpha通道。但原始图像中的一切都是透明的,只有圆圈可见。在下面的示例中,我加载此图像并使用Python 加载具有透明背景的图像 我试过的,python,opencv,Python,Opencv,我试着装这个 在python中使用opencv的图像,如您所见,该图像将在此处作为png加载,而不使用alpha通道。但原始图像中的一切都是透明的,只有圆圈可见。在下面的示例中,我加载此图像并使用cv2.imshow显示图像。有趣的是,我的整个背景是黄色的 导入cv2 前台=cv2.imread('img2.png',cv2.imread_不变) cv2.imshow(“img”,前景) cv2.等待键(0) cv2.destroyAllWindows() imshow的结果如下所示: 因
cv2.imshow
显示图像。有趣的是,我的整个背景是黄色的
导入cv2
前台=cv2.imread('img2.png',cv2.imread_不变)
cv2.imshow(“img”,前景)
cv2.等待键(0)
cv2.destroyAllWindows()
imshow的结果如下所示:
因此,在加载代码并检查数组值后,我进一步研究了图像。我已经知道我的第一个像素是背景,但我需要找到绿色像素:
导入cv2
将numpy作为np导入
前台=cv2.imread('img2.png',cv2.imread_不变)
bg_像素_=0
bg_像素_v=0
打印(前景[bg_像素,bg_像素,v:])
# > [115 189 247 0]
gr_pixel_=np.其中(前景[:,:,0]!=115)[0][0]
gr_pixel_v=np.其中(前景[:,:,0]!=115)[1][0]
打印(前景[gr_像素,gr_像素,v:])
# > [7 255 82 254]
cv2.imshow(“img”,前景)
cv2.等待键(0)
cv2.destroyAllWindows()
所以我用一个遮罩阵列做了一个小的变通:
mask=前景[:,:,3]==0
前景[遮罩,:3]=[0,0,0]
因此,我的最终图像如下所示:
我的问题
所以我的值[115 189 247 0]来自我的原始图像,它们是我在gimp中使用的背景。在我用opencv加载图像之前,它们是不可见的。那么,有没有一种方法可以加载图像,从而可以轻松地使用cv2.addWeighted
堆叠图像呢?因为这个函数似乎忽略了我的alpha通道值
我的版本
python:3.7.7
opencv:3.4.2
cv2.imshow
忽略透明度。我在这里看不到任何问题,至少在OpenCV的功能中没有。好吧,那么addWeighted没有忽略它?是的,addWeighted
没有忽略它——它不知道数组表示图像,并且在这种情况下某个特定层指定了透明度。该函数只是将输入作为数字数组处理,并在每个通道上独立执行操作。好的,但这也会导致结果,我的黄色背景颜色将混合到另一张图片中,因此,在不使用alpha合成的情况下,实现想要的结果的唯一可能性就是测量我的背景是黑色的。或者opencv有一个alpha合成的函数吗?我不知道,但它的实现相当简单。例如,请参见我的回答:cv2.imshow
忽略透明度。我在这里看不到任何问题,至少在OpenCV的功能中没有。好吧,那么addWeighted没有忽略它?是的,addWeighted
没有忽略它——它不知道数组表示图像,并且在这种情况下某个特定层指定了透明度。该函数只是将输入作为数字数组处理,并在每个通道上独立执行操作。好的,但这也会导致结果,我的黄色背景颜色将混合到另一张图片中,因此,在不使用alpha合成的情况下,实现想要的结果的唯一可能性就是测量我的背景是黑色的。或者opencv有一个alpha合成的函数吗?我不知道,但它的实现相当简单。例如,请参见我的答案: