opencv - 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 可以进行多对一映射。我想知道这怎么可能。
解决方案
COLOR_BGR2GRAY
B
颜色模式使用每个像素的, G
,R
通道的加权和来估计每个像素的灰度值w_R*R+w_G*G+w_B*B=Y
。所以任何 3 通道图像变成 1 通道。
COLOR_GRAY2BGR
颜色模式基本上用灰度值替换所有B
、、、通道G
,所以。它通过复制将单通道图像转换为多通道图像。R
Y
B=Y, G=Y, R=Y
更多关于颜色模式的文档在这里。
推荐阅读
- java - 如何等到从服务器加载数据
- flutter - Flutter:无法将 Firestore 数据存储到局部变量(返回 null)
- java - 无法在heroku上部署
- php - 如何在 PHP 中解码多维 Json 数组
- c# - INSERT 语句与 FOREIGN KEY 约束“tblFavoriteTeam_LoginId”冲突
- jquery - 使用其选择器文本查找,然后获取其标题
- c++ - 如果 rand() 生成,为什么 rand() % 100 不会生成均匀分布的随机数?
- html - 为另一个图像设置背景图像?
- python-3.x - 在 django views.py 中获取 NameError,因为 NameError : name 'edit_load_table' is not defined
- c++ - 如何在没有朋友c ++的情况下进行模板分配