python---基础知识回顾(十一)图像处理模块PIL

前戏:

虽然PIL没有入OpenCV那样强大的功能,但是所提供的功能,在一般的图像处理中足够使用。

图像类别:

计算机绘图中有两类图像:一类是矢量图,另一类是点阵图(位图)

矢量图
基于计算机数字对象的绘图,其图形的构成包括点,线,多边形等这样的几何图像。在实际显示的时候一般都是通过数学公式计算得到的。
所以其产生的文件比较小,而且对其进行缩放,旋转等操作后,图像不会失真。这种图像与分辨率无关,在输出结果的时候不会影响到图像的清晰度。
Flash使用的就是矢量图。其缺点就是无法表现颜色的细节变化。所以在PIL中没有包含对这类图像处理的模块。不支持矢量图像
位图
基本组成单元为像素。
通过这些像素的不同颜色排列,就构成了颜色丰富的图像。当放大图像,可以看到像素单元,也可能会失真。
这种图像需要保存每个像素的内容,所以文件比较大。而且,其大小是随着像素的增加而增加的。
但是由于采用了像素这样微小的图形单元来下显示色彩,使得位图可以表现丰富的颜色,更加逼真。在处理图像的时候需要考虑到分辨率邮箱,这对最后的输出很重要

常见位图格式:

(1)BMP格式:

windows下的标准图像文件格式。是很多图像处理软件的中间格式。其未进行压缩,文件占用空间较大

(2)JPEG格式:

对图像的视觉不敏感部分进行了有损压缩,保持了其中主要的图像特征。文件爱你相对较小。
JPEG2000可以实现渐进传输,先传递轮廓,再传递细节数据

(3)GIF格式:

针对网络传输带宽限制开发的一种图片格式。。图像中可以包含透明区域,同时可以存储多幅静态图片而形成的连续的动画。
压缩比高,文件较小。但是只能储存不超过256色的图像

(4)PNG格式:

考虑了文件大小和图像质量的关系。采用了无损压缩方式进行压缩。
使得图像在保持质量的同时,减小了文件大小。还支持透明区域,使得其在网络设计中也具有一定的优势。

其他概念:

1.坐标:

PIL中采用的是笛卡尔坐标系,以左上点为(0,0),水平向右为x正,垂直向下为y正

2.像素

由于位图中是采用像素来保存颜色,所以像素的大小就是指其水平方向和垂直方向上的像素个数,1600x1200表示长为1600像素,宽为1200像素的图像大小。

3.颜色模式

颜色模式决定了图像如何描述和重现图像中的色彩。在显示和打印输出的时候会用到这个概念。

常见颜色模式有RGB,CMYK,灰度模式等,不同表达方式用在不同的领域。

一般在计算机上进行图像处理都是使用RGB,加色法(颜色通道叠加产生颜色)。
印刷上多用CMKY,采用青,品红,黄,黑四种油墨。减色法,通过色素合成后吸收光线来产生不同的颜色。
灰度颜色模式值包含灰度信息,不包含彩色信息。可以看做是只由一种颜色通道组成的,一般用8比特来表示颜色信息。

4.PIL支持的4中插值算法

1)nearest
最近邻插值方法,将会选择输入图像中最近的图像来处理
(2)bilinear
双线性插值方法。将会对输入的图像选择2x2的区域进行线性插值
(3)bicubic
双立方插值方法。选择输入的图像4x4区域进行立方插值
(4)antialias
通过高质量的采样器作用在所有输入图像的像素上,从而得到输出图像的方法

图像缩小可以选择antialias方法,bilinear和bicubic更适用于等比例变换或者是图像放大等操作。

图像的基本处理

1.图像的读写保存

from PIL import Image

img1 = Image.open("1.jpg")  #使用Image模块中的open方法,从指定的图像文件中获取一个Image对象,出错触发错误
img2 = Image.Image()    #构造函数定义一个空的图像对象

print(img1,type(img1))  #根据文件判别Image对象
print(img2,type(img2))  #初始Image对象

img1.show() #显示图像
img1.save("hhh.png")    #注意这里可以用来保存图片,而且支持不同类型文件的转换

注意这里的show方法被调用的时候,PIL将会生成一个临时文件,然后使用windows中的图像处理工具显示。效率极低。而且若是程序先退出,临时文件会被回收,工具显示会出错

2.获取图像的信息

当生成了Image对象后,可以通过此Image对象来获取关于此图像文件的信息。包括分辨率,文件格式,大小,颜色模式,文件名,读写属性等。对于构造函数生成的空文件对象,大部分操作不允许,因为其文件格式为NoneType

猜你喜欢

转载自www.cnblogs.com/ssyfj/p/9051734.html
今日推荐