Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/308.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 加载具有透明背景的图像 我试过的_Python_Opencv - Fatal编程技术网

Python 加载具有透明背景的图像 我试过的

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的结果如下所示: 因

我试着装这个

在python中使用opencv的图像,如您所见,该图像将在此处作为png加载,而不使用alpha通道。但原始图像中的一切都是透明的,只有圆圈可见。在下面的示例中,我加载此图像并使用
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合成的函数吗?我不知道,但它的实现相当简单。例如,请参见我的答案: