如何在opencv python中将特定像素变为透明?

1 投票
2 回答
5295 浏览
提问于 2025-04-17 19:46

我有一张图片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)

撰写回答