Numpy 调整图像大小

本章将把SciPy库中的一个示例图像Lena,加载到一个数组中。顺便说一下,本章不是要讨论图像处理,我们只是把图像数据用作输入。
Lena Soderberg是1972年出现在《花花公子》杂志上的一个人物。因为历史的原因,图像处理领域中会经常用到她的一幅肖像。请勿多虑,在工作中使用这个肖像是绝对安全的。
Numpy 调整图像大小
我们将用repeat函数调整该图像的大小。该函数用来对一个数组进行repeat操作,其实际效果就是按一定比例调整图像大小。

准备工作

使用本攻略的前提条件是SciPy、Matplotlib和PIL都已安装好了。

具体步骤

  1. 加载图像Lena到数组中。
    SciPy中有一个lena函数,可以用该函数把图像Lena加载到NumPy数组中。
lena = scipy.misc.lena() 

SciPy的0.10及之后的版本重构了部分代码,如果你用的是重构之前的旧版本,正确的代码是:

lena = scipy.lena()
  1. 检查数组的形状。
    numpy.testing包中的assert_equal函数检查数组Lena的形状,这是一个可选的完整性检查。
numpy.testing.assert_equal((LENA_X, LENA_Y), lena.shape)
  1. 调整数组Lena的大小。
    repeat函数调整数组Lena的大小。需要分别在x和y方向给出一个调整系数:
resized = lena.repeat(yfactor, axis=0).repeat(xfactor, axis=1)
  1. 绘制数组对应的图像。
    我们将把原始图像Lena和调整大小后的图像,分别画到一个网格内的两个子图中。在第一个子图中绘制数组Lena
matplotlib.pyplot.subplot(211)
matplotlib.pyplot.imshow(lena)

Matplotlib中的subplot函数用来创建子图。这个函数以一个3位的整数作为参数,最高位的数字代表行数,第二个数字代表列数,最后一个数字代表子图的位置索引(从1开始编号)。imshow函数用来显示图像,show函数用来显示最终的结果。
把大小调整后的数组绘制在第二个子图中,并显示最终的结果。该子图的位置索引是2。

matplotlib.pyplot.subplot(212)
matplotlib.pyplot.imshow(resized)
matplotlib.pyplot.show()

最终的结果如下图所示,第一个子图是原始图像,第二个子图是大小调整后的图像。
调整图像大小

本攻略的完整代码如下。

import scipy.misc
import sys
import matplotlib.pyplot
import numpy.testing

# 这个脚本用来调整SciPy库中图像Lena的大小。

if(len(sys.argv) != 3):
    print "Usage python %s yfactor xfactor" % (sys.argv[0])
    sys.exit()

# 加载图像Lena到一个数组中
lena = scipy.misc.lena()
# 图像Lena的规格
LENA_X = 512
LENA_Y = 512
# 检查数组Lena的形状
numpy.testing.assert_equal((LENA_X, LENA_Y), lena.shape)

# 获取调整系数
yfactor = float(sys.argv[1])
xfactor = float(sys.argv[2])

# 调整数组Lena的大小
resized = lena.repeat(yfactor, axis=0).repeat(xfactor, axis=1)

# 检查大小调整后的数组的形状
numpy.testing.assert_equal((yfactor * LENA_Y, xfactor * LENA_Y), resized.shape)

# 绘制数组Lena
matplotlib.pyplot.subplot(211)
matplotlib.pyplot.imshow(lena)

# 绘制大小调整后的数组
matplotlib.pyplot.subplot(212)
matplotlib.pyplot.imshow(resized)
matplotlib.pyplot.show()

小结

repeat函数对数组进行repeat操作。对于本例的情况,其结果是改变了原始图像的大小。Matplotlib中的subplot函数用来创建子图,imshow函数用来显示图像,show函数用来显示最终的结果。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程