二、使用scipy读图片并改变图片大小

1.scipy.ndimage.imread

  scipy.ndimage.imread()方法在scipy的1.0.0版本中被丢弃了,在1.2.0版本中通过imageio.imread来调用该方法。由于我的scipy版本还是0.19.0版本的,所以我这里就直接通过scipy.ndimage.imread来调用了。
  该方法用来从文件中读取图像作为数组。只有在安装了Python Imaging Library (PIL)库之后才能使用该方法。该方法接收3个参数:fnameflattenmode。其中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()

会打印如下内容:
这里写图片描述

并显示图片:

二、使用scipy读图片并改变图片大小_第1张图片

这表示以上图片是由1181*1181个像素组成的,3表示RGB3个通道,无透明度。如果读图片时,把flatten赋值为True,会得到如下的打印结果:

这里写图片描述

显示的图片如下:

二、使用scipy读图片并改变图片大小_第2张图片

此时图片只是一层灰度图,其每个像素值的计算方式如下:
L=R299/1000+G587/1000+B114/1000 L = R ∗ 299 / 1000 + G ∗ 587 / 1000 + B ∗ 114 / 1000

2.scipy.misc.imresize

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个像素了,调整大小后的图像显示如下:

二、使用scipy读图片并改变图片大小_第3张图片

是不是变模糊了许多了?好了,读取图片和调整图片大小就说这么多,希望对大家有帮助。

你可能感兴趣的:(python,python细语)