python 图像常用处理

匿名 (未验证) 提交于 2019-12-02 22:56:40

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()

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!