您的位置:首页 > 编程语言 > Python开发

Python图像处理库 PIL

2015-04-09 18:29 330 查看
Python Image Library PIL 下载地址:pythonware 该软件包提供了基本的图像处理功能如:改变图像大小,旋转图像,图像格式转换,色场空间转换,图像增强,直方图处理,插值和滤波等等。

图像处理中的概念

(PIL只支持位图,不支持矢量图)

位图 — 采用像素来识别

图像的大小 — 表示的是像素的大小:比如 640*480 表示长为 640 ,宽为 480 的图像

位图的坐标 — 采用左上角定位,即左上角是(0, 0),右下角是 (max, max)

位图中的一个区域 — 有左上角加右下角表示,如(0, 0, 200, 200) 一个 200*200 的区域

支持多种模式的图形颜色模式

RGB — 将颜色分成红色、绿色、蓝色三个原色通道,通过不同的组合来表示颜色,每个原色的大小在 0~255 之间

CMYK — 采用青 (Cyan) ,品红 (Magenta) ,黄(Yellow) ,黑 (blacK) 四个颜色通道,来源于油墨,所以主要用于印刷行业

灰阶图 — 只包含灰度信息,不包含彩色,一般使用 8B 大小的数来表示

安装:

centos ubuntu 下安装 python-imaging

或 # easy_install PIL

加载一幅图像:

>>> from PIL import Image #Image是模块名字,模块是以.py结尾的文件
>>> image = Image.open('sourece.jpg')   #这里的Image是Image.py模块的一个类,和上面的是不同。image是Image的一个对象

>>> print(image.format, image.size, image.mode)
('JPEG', (200, 200), 'RGB')
三个属性:

format 识别图形的源格式,如果该文件不是从文件中读取的,则被置为 None 值

size 返回的一个二元组,包含水平和垂直方向上的像素数

mode:

11位像素,黑和白,存成8位的像素
L8位像素,黑白
P8位像素,使用调色板映射到任何其他模式
RGB3×8位像素,真彩
RGBA4×8位像素,真彩+透明通道
CMYK4×8位像素,颜色隔离
YCbCr3×8位像素,彩色视频格式
I32位整型像素
F32位浮点型像素
缩放和保存

>>> w, h = img.size  #获取图像尺寸
>>> img.thumbnail(( w//2, h//2))    #缩放图像50%
>>> img.save("/root/Pictures/s.png","jpeg")  把缩放后的图形保存,源格式为jpeg


模糊效果

>>> import Image, ImageFilter
>>> img = Image.open('source.jpg')
>>> img2 = img.filter(ImageFilter.BLUR)
>>> img2.save('./s2.ipg','jpeg')




新建一个红色图像
new = Image.new('RGBA',(640,480),(255,0,0))
new.save('abc.jpg')





把一个背景插入一幅图片

>>> main = Image.open('female.jpg')
>>> print main.size, main.mode, main.format
(640, 960) RGB JPEG
>>>
bg = Image.open('background.jpg').convert(main.mode)
bg = bg.resize(main.size)

newimg = Image.blend(main, bg, 0.2)
newimg.save('woman.jpg')


convert() 该函数可以用来将图像转换为不同色彩模式。

resize() 如果bg原来大小为255,255,这样就可直接变为100,100 ,ImageBILINEAR指定采用双线性法对像素点插值)
bg = bg.resize( (100,100), Image.BILINEAR )






旋转

img = Image.open('b.jpg')
new_img = img.rotate(45)
new_img.save('c.jpeg')


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 度角


图像增强

import ImageFilter
img = Image.open('b.jpg')
i = img.filter(ImageFilter.DETAIL)
i.save('i.jpg')
图像会比之前稍微清晰

切分图片

import Image
img = Image.open('batman.jpg')
box = (100,100,200,200)
region = img.crop(box)
region.save('converted.jpg')
区域由一个4元组定义,表示为坐标是 (left, upper, right, lower)。 Python Imaging Library
使用左上角为 (0, 0)的坐标系统。同时要注意,这些坐标指向像素之间的位置。



内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: