将机要讯息藏匿于没有关联的图像资料是隐写术的常见操作,为了学习这种方法,我们有必要先了解一些基本的图像处理操作。
图像的载入与保存
Python可以通过第三方的库去实现图像的载入与保存,Pillow就是一款不错的图像处理工具库,我们可以使用它快速实现图像的载入、保存:
from PIL import Image
image = Image.open('我的图像.png')
image.save('我保存的图像.jpg')
在使用Image.open
方法打开图像后还可以使用image.show()
方法去显示这张图像;在使用image.save
方法的使用可以通过保存路径中指定的扩展名决定保存的图像格式。
缩放与裁剪
有些时候原始图像的尺寸不符合要求时我们就需要主动调整图像的大小使之符合要求:
image1 = image.resize((100, 100))
print(image1.size)
image2 = image.crop((0, 0, 100, 100))
print(image2.size)
image.resize
用于图像缩放,可以接收一个元祖(x, y)
作为参数,元祖中元素x, y
分别代表宽与高;image.crop
用于裁剪图像,可以接收一个元祖(left, upper, right, lower)
,元祖中的元素分别为左、上、右、下的像素位置;可以使用Image.size
方法去获得调整后的图像大小。
像素操作
虽然Pillow也支持一定程度的像素操作,但目前来看Pillow针对像素值处理的效率还是太低了。所以,为了更快更方便的处理像素值相关的数据我们将使用一款叫numpy的Python数值计算库:
from PIL import Image
import numpy as np
image = Image.open('我的图像.png')
array = np.array(image)
print(array.shape, array.dtype)
使用np.array
可以将Pillow中的Image
对象转换为numpy中的多维数组类型np.ndarray
,该类型的属性.shape
描述其维度信息,属性.dtype
描述其元素数值类型。