我使用PIL.ImageGrab
截图:
screen = ImageGrab.grab(bbox=(869,657,955,714))
screen.save("PictureName.png")
稍后,我使用cv2.imread
打开该图像,并希望获得alpha通道:
template = cv2.imread('PictureName.png', cv2.IMREAD_UNCHANGED)
hh, ww = template.shape[:2]
alpha = template[:,:,3]
alpha = cv2.merge([alpha,alpha,alpha])
cv2.imshow('alpha',alpha)
这不起作用,我得到以下错误:
alpha = template[:,:,3] -> index 3 is out of bounds for axis 2 with size 3
如何修复此问题以使此代码正常工作
实际的问题是,默认情况下
PIL.ImageGrab
使用模式为RGB
的Image
对象。因此,保存的图像没有alpha通道。即使在使用cv2.imread(..., cv2.IMREAD_UNCHANGED)
时,生成的NumPy数组也将具有(height, width, 3)
形状,因此访问template[..., 3]
将导致给定的错误因此,在执行alpha通道方面,似乎有两种方法可以改进代码
抓取屏幕截图后,将
Image
对象转换为模式RGBA
,然后保存打开映像时,请选中
template.shape[2] == 3
,如有必要,请使用cv2.cvtColor(template, cv2.COLOR_BGR2BGRA)
下面是一些代码片段:
这就是输出:
相关问题 更多 >
编程相关推荐