图像基本操作:NumPy,SciPy

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对浮点数做乘积或除法操作会使整数类型的数组变成浮点类型。

你可能感兴趣的:(图像基本操作:NumPy,SciPy)