在Python中将图像转换为矩阵

31

我想使用Python做一些图像处理。

是否有一种简单的方法可以导入.png图像作为灰度/RGB值矩阵(可能使用PIL)?

6个回答

33

scipy.misc.imread()会返回一个Numpy数组,这对于许多事情来说非常方便。


3
即使没有安装PIL,matplotlib.imread也可以读取.png文件。 - denis
这个答案已经有13年的历史了,所以scipy.misc.imread()被废弃并不令人意外。文档建议使用imageio.imread;任何使用PIL的选项都是可取的。 - MaxPi

13

到目前为止,没有人提到过 matplotlib.image

import matplotlib.image as img
image = img.imread(file_name)

现在的图像将是一个3D的numpy数组

print image.shape

可能是这样的:(317, 504, 3)


它提供图像尺寸而不是将图像转换为矩阵。 - Abubakar
@Salvador 这将返回图像的形状,其中结果中的前两个参数分别给出长度和宽度,而第三个参数则给出维度。问题是关于矩阵的。 - Vidit Varshney
“function”对象没有属性“imread”?x_test = [img.imread.imread(path, 'r') for path in x_test_paths] - K-Dawg

7

scipy.misc.imread()现在已经过时了。我们可以使用imageio.imread代替它来将其读取为Numpy数组。


6
PIL中,im.load返回类似矩阵的对象。

2

谢谢 - 我需要研究一下这个。目前,我已经安装了 Scipy 和 PIL... - hatmatrix

1

一定要试试

from matplotlib.image import imread

image  = imread(filename)  

文件名最好是以 .jpg 图像结尾。然后,尝试


image.shape

这将返回:
  • 对于黑白或灰度图像 一个(n,n)矩阵,其中n表示图像(像素)的尺寸,矩阵内的值范围从0到255。 通常将0视为黑色,将255视为白色。128往往是灰色!

  • 对于彩色或RGB图像 它将呈现一个3个通道的张量。每个通道都是一个(n,n)矩阵,其中每个条目分别表示在图像内部的实际位置处红色、绿色或蓝色的级别。


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