cv2.COLOR_GRAY2RGB 是做什么的?

What does cv2.COLOR_GRAY2RGB do?

正好遇到这个APIcv2.COLOR_GRAY2RGB。我觉得很奇怪,因为应该没有办法将灰度图像转换为 RGB 图像。所以我尝试了这样的事情: 我拍了这样一张图片:

图像由 plt.imshow(img) 显示(带有默认参数)。 然后我用 cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) 将它转换成灰度并得到这个:

我知道它看起来不是灰度是因为默认情况下 imshow() 不显示灰度图像(我认为更像是热图)。所以我用了 cv2.cvtColor(img, cv2.COLOR_GRAY2RGB) 得到了这个:

尽管它现在有三个通道,但看起来还是灰溜溜的。所以我得出结论,cv2.COLOR_GRAY2RGB 是一种在不更改 imshow().

设置的情况下以灰度方式显示灰度图像的方法。

现在我的问题是,当我再次使用cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)将这个三通道的灰度图像转换回一个通道时,像素值是完全一样的作为我第一次使用 cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) 将原始图像转换为一个通道:

换句话说,cv2.COLOR_BGR2GRAY可以做多对一的映射。我想知道这怎么可能。

COLOR_BGR2GRAY 颜色模式使用 BGR 通道、每个像素 w_R*R+w_G*G+w_B*B=Y 的加权和来估计每个像素的灰度值.所以任何 3 通道图像都变成 1 通道。

COLOR_GRAY2BGR颜色模式基本上把所有BGR通道都替换成灰度值Y,所以B=Y, G=Y, R=Y。它通过复制将单通道图像转换为多通道图像。

更多关于颜色模式的文档是 here