以前照相没有像现在这样那么容易的,而在现在你只需要一部手机,就可以免费拍照,而在上一代人之前,业余艺术家和真正的艺术家拍照的费用非常昂贵,并且每张照片的成本也不是免费的。
我们拍照是为了及时地保存美好的瞬间,被保存的记忆可以随时在未来被"打开"。
这个过程就像腌制东西一样,所以我们要注意正确的防腐剂。虽然现在手机为我们提供了一系列的图像处理软件,但是如果我们需要处理大量的照片时,我们就需要其他的工具了,此时编程和Python就派上用场了。Python及其模块如Numpy、Scipy、Matplotlib和其他特殊模块提供了各种各样的函数,能够处理大量图片。
为了向你介绍必要的知识,本文Python教程将教你如何进行基本的图像处理和操作,为此我们使用模块NumPy、Matplotlib和SciPy。
我们从scipy包的misc工具开始。
# 以下行仅在Python notebook中需要加上:
%matplotlib inline
from scipy import misc
ascent = misc.ascent()
import matplotlib.pyplot as plt
plt.gray()
plt.imshow(ascent)
plt.show()
除了显示图像之外,我们还可以看到带有刻度的轴。如果你需要一些关于大小和像素位置的方向时,这是很有用的,但在大多数情况下,你并不需要这些信息,则我们可以通过添加命令plt.axis("off")
来去掉刻度和轴:
from scipy import misc
ascent = misc.ascent()
import matplotlib.pyplot as plt
plt.axis("off") # 删除轴和刻度
plt.gray()
plt.imshow(ascent)
plt.show()
我们可以看到这个图像的类型是一个整数数组:
ascent.dtype
输出:
dtype('int64')
我们也可以检查图像的大小:
ascent.shape
输出:
(512,512)
misc包里还有一张浣熊的图片:
import scipy.misc
face = scipy.misc.face()
print(face.shape)
print(face.max)
print(face.dtype)
plt.axis("off")
plt.gray()
plt.imshow(face)
plt.show()
(768, 1024, 3)
<built-in method max of numpy.ndarray object at 0x7f9e70102800>
uint8
import matplotlib.pyplot as plt
matplotlib只支持png图像
img = plt.imread('frankfurt.png')
print(img[:3])
[[[ 0.41176471 0.56862748 0.80000001]
[ 0.40392157 0.56078434 0.79215688]
[ 0.40392157 0.56862748 0.79607844]
...,
[ 0.48235294 0.62352943 0.81960785]
[ 0.47843137 0.627451 0.81960785]
[ 0.47843137 0.62352943 0.82745099]]
[[ 0.40784314 0.56470591 0.79607844]
[ 0.40392157 0.56078434 0.79215688]
[ 0.40392157 0.56862748 0.79607844]
...,
[ 0.48235294 0.62352943 0.81960785]
[ 0.47843137 0.627451 0.81960785]
[ 0.48235294 0.627451 0.83137256]]
[[ 0.40392157 0.56862748 0.79607844]
[ 0.40392157 0.56862748 0.79607844]
[ 0.40392157 0.56862748 0.79607844]
...,
[ 0.48235294 0.62352943 0.81960785]
[ 0.48235294 0.62352943 0.81960785]
[ 0.48627451 0.627451 0.83137256]]]
plt.axis("off")
imgplot = plt.imshow(img)