首页 > 解决方案 > cv2.COLOR_GRAY2RGB 有什么作用?

问题描述

我碰巧遇到了这个API cv2.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 可以进行多对一映射。我想知道这怎么可能。

标签: opencvimshow

解决方案


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

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

更多关于颜色模式的文档在这里


推荐阅读