我有图像messi.jpeg。我想用颜色 (0,111,111) 替换像素以在messi.jpeg中透明。现在。我的代码在下面给出。
img[np.where((img == [0,111,111]).all(axis = 2))] = [255,255,255]
我想要透明像素。现在它变成了白色
我有图像messi.jpeg。我想用颜色 (0,111,111) 替换像素以在messi.jpeg中透明。现在。我的代码在下面给出。
img[np.where((img == [0,111,111]).all(axis = 2))] = [255,255,255]
我想要透明像素。现在它变成了白色
对于那些来自谷歌的人来说,上面的答案在撰写时可能是正确的,但正如文档所描述的那样,它不再准确。将负值传递给 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)
OpenCV 不支持透明度(本机),抱歉。
一种方法是在图像中添加另一个通道来表示 Alpha 通道。但是,OpenCV 无法显示 RGBA 图像,因此在加载RGBA 图像时忽略第 4 个通道以正确显示它。