如何在opencv python中将特定像素变为透明?
我有一张图片messi.jpeg。我想把颜色为(0,111,111)的像素替换成透明的,直接在messi.jpeg里操作。现在,我的代码如下。
img[np.where((img == [0,111,111]).all(axis = 2))] = [255,255,255]
我想要透明的像素,但现在它变成了白色。
2 个回答
4
OpenCV不支持透明度(原生不支持),抱歉。
一种方法是给图像添加一个额外的通道来表示透明度通道。不过,OpenCV无法显示RGBA格式的图像,所以在加载RGBA图像时会忽略第4个通道,这样才能正确显示。
7
对于那些从谷歌过来的人,上面的回答在写的时候可能是对的,但根据文档的描述,现在已经不准确了。如果你给imread传一个负值,它会返回一个带有透明通道的数组。
在Python中,这样做就可以了:
>>> im = cv2.imread('sunny_flat.png', -1)
>>> im
array([[[ 51, 44, 53, 255],
[ 46, 40, 46, 255],
[ 40, 31, 36, 255],
...,
[ 24, 26, 36, 255],
[ 26, 28, 39, 255],
[ 15, 17, 27, 255]]], dtype=uint8)
>>> im[0][0] = np.array([0,0,0,0], np.uint8)
>>> im
array([[[ 0, 0, 0, 0],
[ 46, 40, 46, 255],
[ 40, 31, 36, 255],
...,
[ 24, 26, 36, 255],
[ 26, 28, 39, 255],
[ 15, 17, 27, 255]]], dtype=uint8)