猿问

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

语境

我正在使用带有 OpenCV 的 Google Colab 来处理.jpg图像。Colab 对 OpenCV 的imshow功能有问题,因此matplotlib用于打印图像。我知道 OpenCV 使用 BGR 并使用matplotlib我需要使用cv2cvtColor()功能正确显示内容。

问题

加载图像并显示它时,它显示为灰度,即使默认情况下它应该是 BGR。同样,转换为灰度显示图像后,显示为 BGR。

由于图像存储为numpy数组,因此我尝试查找这些数组的维度。应该是 BGR(显示为灰度)的图像如预期的那样是一个三维数组。同样,转换为灰度后的图像如预期的那样是一个二维数组,但它仍然显示为 BGR。

BGR 图像显示为灰度:

灰度图像显示为 BGR:

http://img3.mukewang.com/62cd210000019e3205150552.jpg


神不在的星期二
浏览 291回答 2
2回答

BIG阳

img从我的角度来看,原始图像在第一张图片中显示为灰度的假设是错误的,因为:您已经发现,它img具有三个颜色通道。Matplotlib 不太可能自动将输入图像转换为灰度。看起来,图像左侧有轻微的红色“微光”。旁注:由于 OpenCV 和 Matplotlib 的颜色顺序不同,我怀疑这个“微光”实际上是蓝色的,这在这些照片中更有可能。所以,对于第一张照片:你的视觉感知只是被图像本身愚弄了。:-)实际的灰度转换图像(您的第二张图片)与 Matplotlib 的标准颜色图一起显示。正如马克和其他人正确指出的那样,您应该按如下方式更改代码以获得实际的“灰度图像”:plt.imshow(img, cmap='gray')

幕布斯7119047

如果您想要转换彩色图像并以灰度显示:import matplotlib as plt# Reading color image as grayscaleimg = 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为蓝色。
随时随地看视频慕课网APP

相关分类

Python
我要回答