python 图像常用处理

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,随笔)