第 1 章 基本的图像操作和处理
1.1 PIL: Python图像处理类库
PIL(Python Imaging Library Python,图像处理类库)提供了通用的图像处理功能,以及大量有用的基本图像操作,比如图像缩放、裁剪、旋转、颜色转换等。
图像读取、显示、显示对应灰度图


1.1.1 转换图像格式
例:
from PIL import Image
image = Image.open('远景.jpg')
image.save(‘远景’.jpg')
save():将图像保存成多种格式文件
(PIL会进行检查,将不是JPEG的文件自动转换为JPEG)
1.1.2 创建缩略图


1.1.3 复制和粘贴图像区域


1.1.4 调整尺寸和旋转


1.2 Matplotlib
我们处理数学运算、绘制图表,或者在图像上绘制点、直线和曲线时,Matplotlib是个很好的类库,具有比PIL更强大的绘图功能。
1.2.1 绘制图像、点和线

1.2.2 图像轮廓和直方图


1.2.3 交互式标注
1.3 NumPy
NumPy(http://www.scipy.org/NumPy/)是非常有名的Python科学计算工具包,其中包含了大量有用的思想,比如数组对象(用来表示向量、矩阵、图像等)以及线性代数函数。NumPy中的数组对象几乎贯穿用于本书的所有例子中1数组对象可以帮助你实现数组中重要的操作,比如矩阵乘积、转置、解方程系统、向量乘积和归一化,这为图像变形、对变化进行建模、图像分类、图像聚类等提供了基础。
1.3.1 图像数组表示


每行的第一个元组表示图像数组的大小(行、列、颜色通道),紧接着的字符串表示数组元素的数据类型。因为图像通常被编码成无符号八位整数(uint8),所以在第一种情况下,载入图像并将其转换到数组中,数组的数据类型为“uint8”。在第二种情况下,对图像进行灰度化处理,并且在创建数组时使用额外的参数;该参数将数据类型转换为浮点型。
1.3.2 灰度变换


1.3.3 图像缩放
def imresize(im,sz):
"""使用PIL对象重新定义图像数组的大小"""
pil_im = Image.fromarray(uint8(im))
return array(pil_im.resize(sz))
1.3.4 直方图均衡化
def histeq(im,nbr_bins=256):
"""对一幅灰度图像进行直方图均衡化"""
#计算图像的直方图
imhist,bins = histogram(im.flatten(),nbr_bins,normed=True)
cdf = imhist.cumsum() # cumulative distribution function
cdf = 255 * cdf / cdf[-1] # 归一化
# 使用累积分布函数的线性插值,计算新的像素值
im2 = interp(im.flatten(),bins[:-1],cdf)
return im2.reshape(im.shape), cdf
from PIL import Image
from numpy import *
im = array(Image.open('C:\\Users\\psen2\\Pictures\\Camera Roll\\1.jpg').convert('L'))
im2,cdf = imtools.histeq(im)
1.3.5 图像平均
def compute_average(imlist):
"""计算图像列表的平均图像"""
# 打开第一幅图像,将其存储在浮点型数组中
averageim = array(Image.open(imlist[0]), 'f')
for imname in imlist[1:]:
try:
averageim += array(Image.open(imname))
except:
print( imname + '...skipped')
averageim /= len(imlist)
# 返回uint8类型的平均图像
return array(averageim, 'uint8')
1.4 SciPy
SciPy(http://scipy.org/)是建立在NumPy基础上,用于数值运算的开源工具包。SciPy提供很多高效的操作,可以实现数值积分、优化、统计、信号处理,以及对我们来说最重要的图像处理功能。