参考博客: https://blog.csdn.net/icamera0/article/details/50654910
前置内容:Python图像处理库PIL的基本概念介绍: https://blog.csdn.net/icamera0/article/details/50647465
image类的属性
Format
定义:im.format ⇒ string or None
含义:源文件的文件格式。如果是由PIL创建的图像,则其文件格式为None。
例子:
1
2
3
4from PIL import Image
im= Image.open("D:\\Code\\Python\\test\\img\\test.jpg")
im.format
'JPEG'Mode
定义:im.mode ⇒ string
含义:图像的模式。这个字符串表明图像所使用像素格式。该属性典型的取值为“1”,“L”,“RGB”或“CMYK”。对于图像模式的介绍,可以参考blog“Python图像处理库PIL的基本概念介绍”。
size
定义:im.size ⇒ (width, height)
含义:图像的尺寸,按照像素数计算。它的返回值为宽度和高度的二元组(width, height)。
New
定义:Image.new(mode,size) ⇒ image
Image.new(mode, size, color) ⇒ image
含义:使用给定的变量mode和size生成新的图像。Size是给定的宽/高二元组,这是按照像素数来计算的。对于单通道图像,变量color只给定一个值;对于多通道图像,变量color给定一个元组(每个通道对应一个值)。在版本1.1.4及其之后,用户也可以用颜色的名称,比如给变量color赋值为“red”。如果没有对变量color赋值,图像内容将会被全部赋值为0(图像即为黑色)。如果变量color是空,图像将不会被初始化,即图像的内容全为0。这对向该图像复制或绘制某些内容是有用的。
例子:
1
2
3
4
5>>>from PIL import Image
>>> im= Image.new("RGB", (128, 128), "#FF0000")
>>>im.show()图像im为128x128大小的红色图像
Open()
定义:Image.open(file) ⇒ image
Image.open(file, mode) ⇒ image
含义:打开并确认给定的图像文件。这个是一个懒操作;该函数只会读文件头,而真实的图像数据直到试图处理该数据才会从文件读取(调用load()方法将强行加载图像数据)。如果变量mode被设置,那必须是“r”。
1
2<class 'PIL.Image.Image'>
<PIL.Image.Image image mode=RGB size=224x224 at 0x241D78DB438>
用户可以使用一个字符串(表示文件名称的字符串)或者文件对象作为变量file的值。文件对象必须实现read(),seek()和tell()方法,并且以二进制模式打开。
Blend()
定义:Image.blend(image1,image2, alpha) ⇒ image
含义:使用给定的两张图像及透明度变量alpha,插值出一张新的图像。这两张图像必须有一样的尺寸和模式。
合成公式为:out = image1 *(1.0 - alpha) + image2 * alpha
如果变量alpha为0.0,将返回第一张图像的拷贝。如果变量alpha为1.0,将返回第二张图像的拷贝。对变量alpha的值没有限制
Eval()
定义:Image.eval(image,function) ⇒ image
含义:使用变量function对应的函数(该函数应该有一个参数)处理变量image所代表图像中的每一个像素点。如果变量image所代表图像有多个通道,那变量function对应的函数作用于每一个通道。注意:变量function对每个像素只处理一次,所以不能使用随机组件和其他生成器
1
2
3
4
5
6
7>>>from PIL import Image
>>>im01 = Image.open("D:\\Code\\Python\\test\\img\\test01.jpg")
deffun(x):
return x * 0.5
>>>im_eval = Image.eval(im01, fun)
>>>im_eval.show()
>>>im01.show(
Frombuffer
定义:Image.frombuffer(mode,size, data) ⇒ image
Image.frombuffer(mode, size,data, decoder, parameters) ⇒ image
含义:(New in PIL 1.1.4)使用标准的“raw”解码器,从字符串或者buffer对象中的像素数据产生一个图像存储。对于一些模式,这个图像存储与原始的buffer(这意味着对原始buffer对象的改变体现在图像本身)共享内存。并非所有的模式都可以共享内存;支持的模式有“L”,“RGBX”,“RGBA”和“CMYK”。对于其他模式,这个函数与fromstring()函数一致。
Fromstring
定义:Image.fromstring(mode,size, data) ⇒ image
Image.fromstring(mode, size,data, decoder, parameters) ⇒ image
含义:函数Image.fromstring(mode,size, data),使用标准的“raw”解码器,从字符串中的像素数据产生一个图像存储。
函数Image.fromstring(mode,size, data, decoder, parameters)也一样,但是允许用户使用PIL支持的任何像素解码器。更多信息可以参考:Writing YourOwn File Decoder.
注意:这个函数只对像素数据进行解码,而不是整个图像。如果用户的字符串包含整个图像,可以将该字符串包裹在StringIO对象中,使用函数open()来加载
image类的方法
convert
定义1:im.convert(mode)⇒ image
含义1:将当前图像转换为其他模式,并且返回新的图像。
当从一个调色板图像转换时,这个方法通过这个调色板来转换像素。如果不对变量mode赋值,该方法将会选择一种模式,在没有调色板的情况下,使得图像和调色板中的所有信息都可以被表示出来。
copy
定义:im.copy() ⇒ image
含义:拷贝这个图像。如果用户想粘贴一些数据到这张图,可以使用这个方法,但是原始图像不会受到影响。
crop
定义:im.crop(box) ⇒ image
含义:从当前的图像中返回一个矩形区域的拷贝。变量box是一个四元组,定义了左、上、右和下的像素坐标。
Draft
定义:im.draft(mode,size)
含义:配置图像文件加载器,使得返回一个与给定的模式和尺寸尽可能匹配的图像的版本。例如,用户可以使用这个方法,在加载一个彩色JPEG图像时将其转换为灰色图像,或者从一个PCD文件中提取一个128x192的版本。
注意:这个方法会适时地修改图像对象(精确地说,它会重新配置文件的读取器)。如果图像已经被加载,那这个方法就没有作用了
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23>>>from PIL import Image
"D:\\Code\\Python\\test\\img\\test01.jpg") im01 =Image.open(
>>>im01.size
(1024, 768)
im01.mode
'RGB'
>>>im01.draft("L", (100,100))
<PIL.JpegImagePlugin.JpegImageFileimage mode=L size=128x96 at 0x3B69230>
>>>im01.size
(128, 96)
>>>im01.mode
'L
Filter
定义:im.filter(filter) ⇒ image
含义:返回一个使用给定滤波器处理过的图像的拷贝。可用滤波器需要参考ImageFilter模块
Fromstring
定义:im.fromstring(data)
im.fromstring(data, decoder,parameters)
含义:与函数fromstring()一样,但是这个方法会将data加载到当前的图像中。
Getbands
定义:im.getbands()⇒ tuple of strings
含义:返回包括每个通道名称的元组。例如,对于RGB图像将返回(“R”,“G”,“B”)。
例子:
1
2
3
4
5
6
7>>>from PIL import Image
>>> im01 =Image.open("D:\\Code\\Python\\test\\img\\test01.jpg")
>>>im01.getbands()
('R', 'G', 'B')Getbbox
定义:im.getbbox() ⇒ 4-tuple or None
含义:计算图像非零区域的包围盒。这个包围盒是一个4元组,定义了左、上、右和下像素坐标。如果图像是空的,这个方法将返回空。
例子:
1
2
3
4
5>>>from PIL import Image
>>>im01 = Image.open("D:\\Code\\Python\\test\\img\\test01.jpg")
>>>im01.getbbox()(0, 0, 1024,768)
Getcolors
定义:im.getcolors() ⇒ a list of(count, color) tuples or None
im.getcolors(maxcolors) ⇒ a list of (count, color) tuples or None
含义:(New in 1.1.5)返回一个(count,color)元组的无序list,其中count是对应颜色在图像中出现的次数。
如果变量maxcolors的值被超过,该方法将停止计算并返回空。变量maxcolors默认值为256。为了保证用户可以获取图像中的所有颜色,you can pass in size[0]*size[1](请确保有足够的内存做这件事)。
Getdata
定义:im.getdata() ⇒ sequence
含义:以包含像素值的sequence对象形式返回图像的内容。这个sequence对象是扁平的,以便第一行的值直接跟在第零行的值后面,等等。
注意:这个方法返回的sequence对象是PIL内部数据类型,它只支持某些sequence操作,包括迭代和基础sequence访问。使用list(im.getdata()),将它转换为普通的sequence。
例子:
1
>>>from PIL import Image
im01 =Image.open(“D:\Code\Python\test\img\test01.jpg”)
seq= im01.getdata()
seq0 = list(seq)
seq[0]
(11, 113, 198)
seq[2]
(9, 111, 196)
seq0[0]
(11, 113, 198)
seq0[2]
(9, 111, 196)
Sequence对象的每一个元素对应一个像素点的R、G和B三个值。
1
2
3
4
5
6
7
8
9```
11. ### Getextrema
定义:im.getextrema() ⇒ 2-tuple
含义:返回一个2元组,包括该图像中的最小和最大值。
例子:
>>>from PIL import Image
>>>im01 = Image.open("D:\\Code\\Python\\test\\img\\test01.jpg")
>>>im01.getextrema()
1
2
3
4
5
6
7
8
9
10
11
12
((0, 255), (0,255), (0, 255))
该方法返回了R/G/B三个通道的最小和最大值的2元组。
12. ### Getpixel
定义:im.getpixel(xy) ⇒ value or tuple
含义:返回给定位置的像素值。如果图像为多通道,则返回一个元组。
注意:该方法执行比较慢;如果用户需要使用python处理图像中较大部分数据,可以使用像素访问对象(见load),或者方法getdata()
>>>im01.getpixel((1,1))
(10, 112, 197)
>>>r,g,b = im01.split()
>>>r.getpixel((0,0))
11
```