Python下数据处理-图片

图像处理是一门应用非常广的技术,而拥有非常丰富第三方扩展库的 Python 当然不会错过这一门盛宴。PIL (Python Imaging Library)是 Python 中最常用的图像处理库,如果你是python2.x,可以通过以下地址进行下载:http://www.pythonware.com/products/pil/index.htm,找到相对应的版本进行下载就可以了。
注意:PIL模块在python3.x中已经替换成pillow模块,文档地址:http://pillow.readthedocs.io/en/latest/,直接使用pip3 install pillow即可安装模块,导入时使用from PIL import Image.
 
from PIL import Image
 
image = Image.open("1.jpg")
print(image.format, image.size, image.mode)
image.show()
结果:
JPEG (1080, 1920) RGB
并把图片打开,展示出来
 
 
Image的三个属性:
  format : 识别图像的源格式,如果该文件不是从文件中读取的,则被置为 None 值。
 
    size : 返回的一个元组,有两个元素,其值为象素意义上的宽和高。
 
mode : RGB(true color image),此外还有,L(luminance),CMTK(pre-press image)。
Image的方法介绍:
  show():显示最近加载的图像
  open(infilename):  打开文件
  save(outfilename):保存文件
  crop((left, upper, right, lower)):从图像中提取出某个矩形大小的图像。它接收一个四元素的元组作为参数,各元素为(left, upper, right, lower),坐标系统的原点(0, 0)是左上角。
 
 
 
 
 
Image的几何处理:
out = im.resize((128, 128))                     #调整图片大小
out = im.rotate(45)                             #逆时针旋转 45 度角。
out = im.transpose(Image.FLIP_LEFT_RIGHT)       #左右对换。
out = im.transpose(Image.FLIP_TOP_BOTTOM)       #上下对换。
out = im.transpose(Image.ROTATE_90)             #旋转 90 度角。
out = im.transpose(Image.ROTATE_180)            #旋转 180 度角。
out = im.transpose(Image.ROTATE_270)            #旋转 270 度角。
 
 
例子1:抠图
需求,把头像给截图出来:
from PIL import Image
image = Image.open("1.jpg")
print(image.format, image.size, image.mode)
box = (600, 300, 1050, 660)
region = image.crop(box)
region.save("cutting.jpg")
上述代码讲图片的((600, 300), (600, 660), (1050, 300), (1050, 660))所画出来的区域进行裁剪,并保存在cutting.jpg中
 
例子2:图片拼合
from PIL import Image
image = Image.open("1.jpg")
print(image.format, image.size, image.mode)
box = (600, 300, 1050, 660)
egion = image.crop(box)
#egion.save("cutting.jpg")
region = egion.transpose(Image.ROTATE_180)
image.paste(region, box)
image.show()
 
把头像照片截取出来,然后调换头像照片180度,然后在拼接在一起,
 
例子3:缩放:
from PIL import Image
 
infile = "2.jpg"
outfile = "new2.jpg"
image = Image.open(infile)
(x, y) = image.size
newx = 300
newy = int(y*newx/x)
out = image.resize((newx, newy), Image.ANTIALIAS)
out.show()
 
posted @ 2018-01-15 16:15  岁月不可追  阅读(169)  评论(0)    收藏  举报