读取并转换格式
from PIL import Image
pil_im=Image.open("linyuner.jpg")
pil_im=Image.open("linyuner.jpg").convert('L')
#转化为灰度图
读取所有图像文件,并转换成JPEG格式
from PIL import Image
import os
path="filelist"
for infile in filelist:
outfile=os.path.splitext(infile)[0]+".jpg"
#分离文件名与扩展名
if infile !=outfile:
try:
Image.open(infile).save(outfile)
except IOError:
print("can't convert",infile)
def get_imlist(path):
""""返回目录中所有jpg图像的文件名列表"""
return [os.path.join(path,f) for f in os.listdir(path) if f.endswith(".jpg")]
创建缩略图
pil_im.thumbnail((128,128))
剪裁指定区域
box=(100,100,400,400)
#四个角坐标,图像左上角为(0,0)
region=pil_img.crop(box)
逆时针旋转region,然后放回去
region=region.transpose(Image.ROTATE_180)
pil.im.paste(region,box)
调整尺寸和旋转
out=pil_im.resize((128,128))
out=pil_im.rotate(45)
图像中绘制点和线
from PIL import Image
from pylab import *
im=array(Image.open('linyuner.jpg'))
imshow(im)
x=[100,100,400,400]
y=[200,500,200,500]
plot(x,y,'r*')
plot(x[:2],y[:2])
title('Plotting:"linyunerjpg"')
#axis('off')
#坐标轴不显示
show()
from PIL import Image
from pylab import *
im=array(Image.open('linyuner.jpg').convert('L'))
figure()
gray()
contour(im,origin="image")
axis('equal')
axis('off')
figure()
hist(im.flatten(),128)
show()
交互式标注
from PIL import Image
from pylab import *
im=array(Image.open('linyuner.jpg'))
imshow(im)
print('Please click 3 points')
x= ginput(3)
print ('you clicked:',x)
show()
图像数组表示
from PIL import Image
from pylab import *
im=array(Image.open('linyuner.jpg'))
print(im.shape,im.dtype)
im=array(Image.open('linyuner.jpg').convert('L'),'f')
print(im.shape,im.dtype)
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]#最后一列
im[-2:]#倒数第二行
灰度变换
from PIL import Image
from pylab import *
im=array(Image.open("linyuner.jpg").convert('L'))
im2=255-im
im3=(100.0/255)*im+100
im4=255*(im/255.0)**2
pil_im=Image.fromarray(uint(im2))
#将数据类型转换回来
imshow(pil_im)
show()
图像缩放
定义图像缩放函数,不确定输入类型,安全起见,先转换成uint8
def imresize(im,sz):
pil_im=Image.fromarray(uint8(im))
return array(pil_im.resize(sz))
直方图均衡化
#author=MingChaoSun
from PIL import Image
from pylab import *
#读取图像到数组中,并灰度化
im = array(Image.open('linyuner.jpg').convert('L'))
#绘制原始直方图
subplot(231)
hist(im.flatten(),256)
#计算图像直方图(每个bins数组的区间值对应一个imhist数组中的强度值)
imhist,bins = histogram(im.flatten(),256,normed=True)
#计算累积分布函数
cdf = imhist.cumsum()
#累计函数归一化(由0~1变换至0~255)
cdf = cdf*255/cdf[-1]
#绘制累计分布函数
subplot(232)
plot(bins[:256],cdf)
#依次对每一个灰度图像素值(强度值)使用cdf进行线性插值,计算其新的强度值
#interp(x,xp,yp) 输入原函数的一系列点(xp,yp),使用线性插值方法模拟函数并计算f(x)
im2 = interp(im.flatten(),bins[:256],cdf)
#将压平的图像数组重新变成二维数组
im2 = im2.reshape(im.shape)
# 显示均衡化之后的直方图图像
subplot(233)
hist(im2.flatten(),256)
#显示原始图像
gray()
subplot(234)
imshow(im)
#显示变换后图像
subplot(236)
imshow(im2)
show()