0

我有图像messi.jpeg。我想用颜色 (0,111,111) 替换像素以在messi.jpeg中透明。现在。我的代码在下面给出。

 img[np.where((img == [0,111,111]).all(axis = 2))] = [255,255,255]

我想要透明像素。现在它变成了白色

4

2 回答 2

5

对于那些来自谷歌的人来说,上面的答案在撰写时可能是正确的,但正如文档所描述的那样,它不再准确。将负值传递给 imread 会返回一个带有 alpha 通道的数组。

在 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)
于 2015-01-18T08:14:06.927 回答
4

OpenCV 不支持透明度(本机),抱歉。

一种方法是在图像中添加另一个通道来表示 Alpha 通道。但是,OpenCV 无法显示 RGBA 图像,因此在加载RGBA 图像时忽略第 4 个通道以正确显示它。

于 2013-03-20T16:15:43.293 回答