Python图像处理之基本概念和常用模块简介

基本概念

在图像处理中常见的概念有模式(mode)、通道(bands)、尺寸(size)、坐标系统(coordinate system)、调色板(palette)、信息(info)和滤波器(filters)。

模式(mode)

所谓图像模式就是把色彩分解成部分颜色组件,对颜色组件不同的分类就形成了不同的色彩模式。图像的模式定义了图像的类型和像素的位宽。如下为常见的图像模式:

modes 描述
1 1位像素,黑和白,存成8位的像素
L 8位像素,黑白
P 8位像素,使用调色板映射到任何其他模式
RGB 3× 8位像素,真彩
RGBA 4×8位像素,真彩+透明通道
CMYK 4×8位像素,颜色隔离
YCbCr 3×8位像素,彩色视频格式
I 32位整型像素
F 32位浮点型像素
from PIL import Image
im = Image.open("E:\mywife.jpg")
print(im.mode)                    ##显示图像的mode

如下图所示为测试图像“gakki”的图像模式输出

mode

通道(bands)

把图像分解成一个或多个颜色成分。一般认为可分为:

  • 单通道:一个像素点只需一个数值表示,只能表示灰度,0为黑色;
  • 三通道:RGB模式,把图像分为红绿蓝三个通道,可以表示彩色,全0表示黑色;
  • 四通道:在RGB基础上加上alpha通道,表示透明度,alpha=0表示全透明;

对于一张图片的通道数量和名称,可以通过方法getbands()来获取。方法getbands()是Image模块的方法,它会返回一个字符串元组(tuple)。该元组将包括每一个通道的名称。

from PIL import Image
im = Image.open("E:\mywife.jpg")
im_bands = im.getbands()
print(len(im_bands))               ##显示通道计数,len()为字符串计数函数
print(im_bands)                    ##显示通道
print(im_bands[0])                 ##显示第1通道
print(im_bands[2])                 ##显示第3通道

如下图为依次显示的通道计数、通道显示、第1通道显示和第3通道显示结果。
bands

尺寸(size)

尺寸相对好理解的概念,用来描述图像的大小,一般单位是像素。

from PIL import Image
im = Image.open("E:\mywife.jpg")
print(im.size)             ##显示图像的大小
print(im.size[0])          ##水平方向的像素数
print(im.size[1])          ##垂直方向上的像素数

坐标系统

PIL使用笛卡尔像素坐标系统,坐标(0,0)位于左上角。注意:坐标值表示像素的角;位于坐标(0,0)处的像素的中心实际上位于(0.5,0.5)。坐标经常用于二元组(x,y)。长方形则表示为四元组,前面是左上角坐标。例如,一个覆盖AxB的像素图像的长方形表示为(0,0,A,B)。
ZUOBIAO

调色板(palette):

调色板模式(”P”)适用一个颜色调色板为每一个像素定义具体的颜色值。

信息(info)

使用info属性可以为一张图片添加一些辅助信息。这个是字典对象。加载和保存图像文件时,多少信息需要处理取决于其文件的格式。

from PIL import Image
im = Image.open("E:\mywife.jpg")
print(im.info)

如下图为图像的具体信息显示。

info

滤波器(filters)

将多个输入像素映射为一个输出像素的几何操作,PIL提供了4种不同的采样滤波器:

  • NEAREST:最近滤波。从输入图像中选取最近的像素作为输出像素。
  • BILINEAR:双线性内插滤波。在输入图像的2*2矩阵上进行线性插值。
  • BICUBIC:双立方滤波。在输入图像的4*4矩阵上进行立方插值。
  • ANTIALIAS:平滑滤波。对所有可以影响输出像素的输入像素进行高质量的重采样滤波,以计算输出像素值。

注意:在当前的PIL版本中,ANTIALIAS滤波器是下采样(例如,将一个大的图像转换为小图)时唯一正确的滤波器。BILIEAR和BICUBIC滤波器使用固定的输入模板,用于固定比例的几何变换和上采样是最好的。Image模块中的resize()和thumbnail()用到了滤波器。

PIL常见模块

PIL有如下几个模块:Image模块、ImageChops模块、ImageDraw模块、ImageEnhance模块、ImageFile模块、ImageFileIO模块、ImageFilter模块、ImageFont模块、ImageGrab模块、ImageOps模块、ImagePath模块、ImageSequence模块、ImageStat模块、ImageTk模块、ImageWin模块、PSDraw模块

Image模块

Image模块提供了一个相同名称的类,即image类,用于表示PIL图像。这个模块还提供了一些函数,包括从文件中加载图像和创建新的图像。Image模块是PIL中最重要的模块,它提供了诸多图像操作的功能,比如创建、打开、显示、保存图像等功能,合成、裁剪、滤波等功能,获取图像属性功能,如图像直方图、通道数等。

ImageChops模块

ImageChops模块包含一些算术图形操作,叫做channel operations(“chops”)。这些操作可用于诸多目的,比如图像特效,图像组合,算法绘图等等。通道操作只用于8位图像(比如“L”模式和“RGB”模式)。

ImageDraw模块

ImageDraw模块为image对象提供了基本的图形处理功能。例如,它可以创建新图像,注释或润饰已存在图像,为web应用实时产生各种图形。

ImageEnhance模块

ImageEnhance模块包括一些用于图像增强的类。它们分别为Color类、Brightness类、Contrast类和Sharpness类。

ImageFile模块

ImageFile模块为图像打开和保存功能提供了相关支持功能。另外,它提供了一个Parser类,这个类可以一块一块地对一张图像进行解码(例如,网络联接中接收一张图像)。这个类的接口与标准的sgmllib和xmllib模块的接口一样。

ImageFileIO模块

ImageFileIO模块用于从一个socket或者其他流设备中读取一张图像。不赞成使用这个模块。在新的code中将使用ImageFile模块的Parser类来代替它。

ImageFilter模块

ImageFilter模块包括各种滤波器的预定义集合,与Image类的filter方法一起使用。该模块包含这些图像增强的滤波器:BLUR,CONTOUR,DETAIL,EDGE_ENHANCE,EDGE_ENHANCE_MORE,EMBOSS,FIND_EDGES,SMOOTH,SMOOTH_MORE和SHARPEN

ImageFont模块

ImageFont模块定义了一个同名的类,即ImageFont类。这个类的实例中存储着bitmap字体,需要与ImageDraw类的text方法一起使用。

ImageGrab模块

ImageGrab模块用于将屏幕上的内容拷贝到一个PIL图像内存中。

ImageOps模块

ImageOps模块包括一些“ready-made”图像处理操作。它可以完成直方图均衡、裁剪、量化、镜像等操作。这个模块somewhat experimental,大多数操作只工作在L和RGB图像上。

ImagePath模块

ImagePath模块用于存储和操作二维向量数据。Path对象将被传递到ImageDraw模块的方法中。

ImageSequence模块

ImageSequence模块包括一个wrapper类,它为图像序列中每一帧提供了迭代器。

ImageStat模块

ImageStat模块计算一张图像或者一张图像的一个区域的全局统计值。

ImageTk模块

ImageTk模块用于创建和修改BitmapImage和PhotoImage对象中的Tkinter。

ImageWin模块

ImageWin模块用于在windows95/98,NT,2000及以后的系统上创建和显示图像。

PSDraw模块

PSDraw模块为Postscript打印机提供基本的打印支持。用户可以通过这个模块打印字体,图形和图像。

猜你喜欢

转载自blog.csdn.net/zhangziju/article/details/79116920