python 有一个很方便的图像处理包,导入如下
from PIL import Image
(1)图片读取
# 打开图片 from PIL import Image im = Image.open("xxx.ppm") ''' im.format : 识别图像的源 im.size : 图像的像素 im.mode : L 为灰度图 RGB 为彩图 CMYK 为预压图像 ''' print im.format,im.size,im.mode # 从tar 压缩文件中读取 from PIL import Image,TarIO fp = TarIO.TarIO("xxx.tar","xxx.jpg") im = Image.open(fp) # 显示图片 im.show() # 获得所有像素元素 pixels = im.load() # x,y 像素点像素 r = pixels[x,y][0] g = pixels[x,y][1] b = pixels[x,y][2]
(2)读写图片
# 转换成其他格式并保存 Image.open("xxx.ppm").save("xxx.jpg") # 创建 JPEG 略缩图 im = Image.open(infile) size = (128,128) im.thumbnail(size) # 压缩成指定大小 im.save(outfile,"JPEG") # 设置保存格式
(3)图像的剪裁和合并
''' 表示一个区域,由 4 元组定义,其中坐标为(左上,右下) python 映像库使用左上角的(0,0) 坐标系统,坐标就是像素之间的位置 ''' box = (100,100,400,400) # 300 * 300 的一个区域 region = im.crop(box) # 处理一个子矩阵,并黏贴回去 region = region.transpose(Image.ROTATE_180) im.paste(region,box) # 分裂 & 合并图像 r,g,b = im.split() ''' 对于灰度图,返回的是它本身 ''' # 合并 im = Image.merge("RGB",(r,g,b))
(4)几何变换
# 调整图片尺寸 out = im.resize((128,128)) # 旋转角度 out = im.rotate(45) # 上下翻转 out = im.transpose(Image.FLIP_TOP_BOTTOM) # 左右翻转 out = im.transpose(Image.FLIP_LEFT_RIGHT) # 旋转 90,180,270 度 out = im.transpose(Image.ROTATE_90) out = im.transpose(Image.ROTATE_180) out = im.transpose(Image.ROTATE_270)
(5)模式转换
""" 转换成灰度图 """ im = Image.open("xxx.ppm").convert("L")
(6)图像增强
# 过滤 ''' ImageFilter 包含很多方法和模块 ''' from PIL import ImageFilter out = im.filter(ImageFilter.DETAIL) # 点运算,对每个像素作同样的处理 out = im.point(lambda i:i * 1.2)
(7)读取图像序列
# 使用 seek 和 tell 方法在不同的帧之间移动 im = Image.open("xxx.gif") im.seek(1) # 跳转到第一个帧 try: while True: im.seek(im.tell() + 1) im.show() except EOFError: pass # 或者使用 for 循环 from PIL import ImageSequence for frame in ImageSequence.Iterator(im): im.seek(frame) im.show()
文章来源: python 图像常用处理