【发布时间】:2012-08-25 11:00:51
【问题描述】:
我正在尝试使用 matplotlib 读取 RGB 图像并将其转换为灰度图像。
在 matlab 中我使用这个:
img = rgb2gray(imread('image.png'));
在matplotlib tutorial 中,他们没有覆盖它。他们只是在图像中阅读
import matplotlib.image as mpimg
img = mpimg.imread('image.png')
然后他们对数组进行切片,但这与根据我的理解将 RGB 转换为灰度不同。
lum_img = img[:,:,0]
我很难相信 numpy 或 matplotlib 没有将 rgb 转换为灰色的内置函数。这不是图像处理中常见的操作吗?
我编写了一个非常简单的函数,可以在 5 分钟内处理使用 imread 导入的图像。这是非常低效的,但这就是为什么我希望内置一个专业的实现。
Sebastian 改进了我的功能,但我仍然希望找到内置的。
matlab 的 (NTSC/PAL) 实现:
import numpy as np
def rgb2gray(rgb):
r, g, b = rgb[:,:,0], rgb[:,:,1], rgb[:,:,2]
gray = 0.2989 * r + 0.5870 * g + 0.1140 * b
return gray
【问题讨论】:
-
请注意,您可以编写与 rgb2gray 函数相同的内容:
gray = np.mean(rgb, -1)。也许rgb[...,:3]在那里,如果它实际上是rgba。 -
嗯,
gray = np.mean(rgb, -1)工作正常。谢谢。有什么理由不使用它吗?我为什么要改用下面答案中的解决方案? -
grayscale wikipedia page说RGB转灰度的方法不唯一,但是给出了一个基于亮度的常用公式。它与
np.mean(rgb, -1)完全不同。 -
所以我想我想要Matlab's version?
0.2989 * R + 0.5870 * G + 0.1140 * B我假设这是标准的做法。 -
不应该是 0.2990 * R + 0.5870 * G + 0.1140 * B 吗?权重总和应等于 1 而不是 0.9999。在这里查看:en.wikipedia.org/wiki/Grayscale
标签: python matplotlib