【问题标题】:Converting an RGB image to grayscale and manipulating the pixel data in python将RGB图像转换为灰度并在python中操作像素数据
【发布时间】:2014-07-19 02:33:12
【问题描述】:

我有一个 RGB 图像,我想将其转换为灰度图像,这样我就可以为每个像素设置一个数字(可能介于 0 和 1 之间)。这给了我一个矩阵,其尺寸等于图像像素的尺寸。然后我想对这个矩阵做一些操作,并从这个被操作的矩阵中生成一个新的灰度图像。我该怎么做?

【问题讨论】:

  • 有 numpy 和 scipy。 Scipy 让您加载图像并将其转换为 numpy 数组。它在后面使用 PIL。使用 numpy,您可以将 RGB“扁平化”为灰度图像。然后你可以用这个数组做任何你想做的事情
  • 使用 --> openCV -- 或SimpleCV
  • This answer 应该足够了
  • @goncalopp:转换没问题,但是如何将其转换为二维数组?
  • @lovespeed:使用 PIL(la goncalopp 的回答)加载图像本质上是一个二维数组。您可以使用img[x,y] 访问像素。这还不够吗?

标签: python image image-processing python-imaging-library


【解决方案1】:

我经常将图像作为 NumPy 数组处理 - 我这样做:

import numpy as np
from PIL import Image

x=Image.open('im1.jpg','r')
x=x.convert('L') #makes it greyscale
y=np.asarray(x.getdata(),dtype=np.float64).reshape((x.size[1],x.size[0]))

<manipulate matrix y...>

y=np.asarray(y,dtype=np.uint8) #if values still in range 0-255! 
w=Image.fromarray(y,mode='L')
w.save('out.jpg')

如果在操作后您的数组值 y 不再在 0-255 范围内,您可以升级到 16 位 TIFF 或简单地重新缩放。

-阿尔多

【讨论】:

  • 可以使用plt.imshow(y, cmap=plt.get_cmap('gray'))显示灰度图
  • 如果您打算继续使用 tensorflow (2.x+),您可能会发现 tensorflow.keras.preprocessing.image.img_to_array(image) 也很有用,因为这会将 PIL 图像转换为 numpy。数组
猜你喜欢
  • 1970-01-01
  • 2012-08-25
  • 2014-02-26
  • 2014-12-22
  • 2016-11-05
  • 2015-07-11
  • 2013-10-25
相关资源
最近更新 更多