为了账号安全,请及时绑定邮箱和手机立即绑定

为什么 BGR 图像显示为灰度?

为什么 BGR 图像显示为灰度?

神不在的星期二 2022-07-12 15:19:23
语境我正在使用带有 OpenCV 的 Google Colab 来处理.jpg图像。Colab 对 OpenCV 的imshow功能有问题,因此matplotlib用于打印图像。我知道 OpenCV 使用 BGR 并使用matplotlib我需要使用cv2的cvtColor()功能正确显示内容。问题加载图像并显示它时,它显示为灰度,即使默认情况下它应该是 BGR。同样,转换为灰度显示图像后,显示为 BGR。由于图像存储为numpy数组,因此我尝试查找这些数组的维度。应该是 BGR(显示为灰度)的图像如预期的那样是一个三维数组。同样,转换为灰度后的图像如预期的那样是一个二维数组,但它仍然显示为 BGR。BGR 图像显示为灰度:灰度图像显示为 BGR:
查看完整描述

2 回答

?
BIG阳

TA贡献1859条经验 获得超6个赞

img从我的角度来看,原始图像在第一张图片中显示为灰度的假设是错误的,因为:

  • 您已经发现,它img具有三个颜色通道。

  • Matplotlib 不太可能自动将输入图像转换为灰度。

  • 看起来,图像左侧有轻微的红色“微光”。旁注:由于 OpenCV 和 Matplotlib 的颜色顺序不同,我怀疑这个“微光”实际上是蓝色的,这在这些照片中更有可能。

所以,对于第一张照片:你的视觉感知只是被图像本身愚弄了。:-)

实际的灰度转换图像(您的第二张图片)与 Matplotlib 的标准颜色图一起显示。正如马克和其他人正确指出的那样,您应该按如下方式更改代码以获得实际的“灰度图像”:

plt.imshow(img, cmap='gray')


查看完整回答
反对 回复 2022-07-12
?
幕布斯7119047

TA贡献1794条经验 获得超8个赞

如果您想要转换彩色图像并以灰度显示:


import matplotlib as plt


# Reading color image as grayscale

img = cv2.imread(path, 0)


plt.imshow(img, cmap='gray')

plt.show()

其中路径是文件位置。


另一种方法是自己转换。然后您应该使用的过滤器如下:


def rgb2gray(rgb):

    return np.dot(rgb[...,:3], [0.3, 0.59, 0.11]) # colorspace order [R, G, B]


grey_img = rgb2gray(img)

其中R为红色,G为绿色,B为蓝色。


查看完整回答
反对 回复 2022-07-12
  • 2 回答
  • 0 关注
  • 290 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号