使用Numpy将RGB像素数组转换为灰度图像。

20
使用Numpy将大小为(x, y, 3)的RGB像素值数组转换为大小为(x, y, 1)的灰度像素值数组的最佳方法是什么?
我有一个函数rgbToGrey(rgbArray),可以将[r,g,b]数组转换为灰度值。我想与Numpy一起使用它,将数组的第三维从大小3缩小到大小1。
我该如何做?
注意:如果我有原始图像并可以使用Pillow将其变成灰度图像,那么这将非常容易,但我没有原始图像。
更新:
我要找的函数是np.dot()。
根据这个问题的回答:
假设我们通过公式将rgb转换为灰度: .3r * .6g * .1b = 灰度, 我们可以使用np.dot(rgb[...,:3], [.3, .6, .1])来得到我要找的东西,一个只有灰度值的2d数组。
1个回答

30

请参考另一个帖子中的答案。

基本上:

gray = 0.2989 * r + 0.5870 * g + 0.1140 * b
np.dot(rgb[...,:3], [0.299, 0.587, 0.114])

谢谢,我需要的是np.dot()方法! - SlothFriend
请问如何将RGB数组转换为黑白图像?还是我需要提一个新问题? - GD- Ganesh Deshmukh
@ ganeshdeshmukh 您可以使用 PIL Image 的 fromarray 函数。使用此处提到的方法将 RGB 数组转换为灰度,然后 im = Image.fromarray(grey_array)。如果传递 RGB 数组,则可以获得彩色图像 Image.fromarray(rgb_array, mode ='RGB')。 - lange
另外,可以使用以下代码:rgb[..., :3] @ [0.299, 0.587, 0.114]。请参见https://numpy.org/doc/stable/reference/generated/numpy.matmul.html。 - Robz

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接