读取并转换格式
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()