NumPy
- 安装
sudo pip install numpy
- 图像数组表示
载入图像时使用array()
将图像转化成numpy的数组对象
图像数据
from PIL import Image
im = array(Image.open('filename.jpg'))
print im.shape, im.dtype
# (800, 569, 3) uint8
im = array(Image.open('filename.jpg').convert('L'), 'f')
print im.shape, im.dtype
# (800, 569) float32
数组中的元素可以使用下标访问。位于坐标i,j,以及颜色通道k的像素值value = im[i, j, k]
多个数组元素可以使用数组切片方式访问。切片方式返回的是指定间隔下标访问该数组的元素值。
im[i,:] = im[j,:] # 将第j行的数值赋值给第i行
im[:,i] = 100 # 将第i行所有数值设为100
im[:100,:50].sum() # 计算前100行、前50列所有数值的和
im[50:100,50:100] # 50~100行,50~100列(不包括第100行和第100列)
im[i].mean() # 第i行所有数值的平均值
im[:,-1] # 最后1列
im[-2,:] # 倒数第2行 im[-2]
如果仅使用1个下标,则该下标为行下标。
负数切片表示从最后一个元素逆向计数。
- 灰度变换
from PIL import Image
from numpy import *
im = array(Image.open('filename.jpg').convert('L'))
im2 = 255 - im # 对图像进行反向处理
im3 = (100.0/255) * im + 100 # 将图像像素值变到100...200区间
im4 = 255.0 * (im/255.0)**2 # 对图像像素值求平方后得到的图像
查看图像中的最小和最大像素值
print int(im.min()), int(im.max())
array()
的相反操作可以使用PIL的fromarray()
完成
pil_im = Image.fromarray(im)
pil_im = Image.fromarray(uint8(im))
numpy对浮点数做乘积或除法操作会使整数类型的数组变成浮点类型。