scipy.ndimage.imread()方法在scipy的1.0.0版本中被丢弃了,在1.2.0版本中通过imageio.imread来调用该方法。由于我的scipy版本还是0.19.0版本的,所以我这里就直接通过scipy.ndimage.imread来调用了。
该方法用来从文件中读取图像作为数组。只有在安装了Python Imaging Library (PIL)库之后才能使用该方法。该方法接收3个参数:fname,flatten ,mode。其中fname是文件路径,如果flatten=True,则将图片转变成单层的灰度图层。读一张图片时,可能把一张图片转换为一个类似(xdim,ydin,3or4)的3维的矩阵,由于一张图片是可以由RGB3个通道的颜色组成的,若无透明度,则最后一位的值为3,有透明度是,最后一位的值为4。这3维矩阵元素的取值范围为0~255。mode我就不说了,默认是”RGB”模式,也可以有其它取值,有兴趣可以看下官方API,下面来看一个例子:
import pylab
import scipy
import numpy as np
from scipy import ndimage
import matplotlib.pyplot as plt
dir = "./testImgs/"
filename = dir + "la_defense.jpg"
image = np.array(ndimage.imread(filename, flatten=False))
print(image.shape)
plt.imshow(image) # 显示图片
pylab.show()
并显示图片:
这表示以上图片是由1181*1181个像素组成的,3表示RGB3个通道,无透明度。如果读图片时,把flatten赋值为True,会得到如下的打印结果:
显示的图片如下:
此时图片只是一层灰度图,其每个像素值的计算方式如下:
L=R∗299/1000+G∗587/1000+B∗114/1000 L = R ∗ 299 / 1000 + G ∗ 587 / 1000 + B ∗ 114 / 1000
scipy.misc.imresize(arr, size, interp=’bilinear’, mode=None)方法有4个参数,2个可选参数。用来跟一张图片resize,即重新调整大小。其中arr是需要调整大小图片对应的矩阵,可以使scipy.ndimage.imread()方法返回的值。size可以有3种取值:int(返回图像占当前图像大小的百分比),float(返回图像大小/当前图像大小),tuple (需返回图像的大小)。两个可选参数这里不介绍了。在1中我们得到了一个(1181,1181,3)的彩色图像,现在我们来跟它调整一下大小,代码如下:
import pylab
import scipy
import numpy as np
from scipy import ndimage
import matplotlib.pyplot as plt
dir = "./testImgs/"
filename = dir + "la_defense.jpg"
image = np.array(ndimage.imread(filename, flatten=False))
print(image.shape)
my_image = scipy.misc.imresize(image, size=(64, 64))
print(my_image.shape)
plt.imshow(my_image)
pylab.show()
打印结果如下:
可以看出,现在图像的大小为64*64个像素了,调整大小后的图像显示如下:
是不是变模糊了许多了?好了,读取图片和调整图片大小就说这么多,希望对大家有帮助。