Python图像处理库PIL的Image模块(三) Image方法

三、Image类的方法

除非另作说明,Image类的所有方法都将返回一个Image类的新实例,这个实例对应于结果图像。

1、  Convert

定义1im.convert(mode) image

含义1:将当前图像转换为其他模式,并且返回新的图像。

当从一个调色板图像转换时,这个方法通过这个调色板来转换像素。如果不对变量mode赋值,该方法将会选择一种模式,在没有调色板的情况下,使得图像和调色板中的所有信息都可以被表示出来。

当从一个颜色图像转换为黑白图像时,PIL库使用ITU-R601-2 luma转换公式:

L = R * 299/1000 + G * 587/1000 + B * 114/1000

当转换为2位图像(模式“1”)时,源图像首先被转换为黑白图像。结果数据中大于127的值被设置为白色,其他的设置为黑色;这样图像会出现抖动。如果要使用其他阈值,更改阈值127,可以使用方法point()。为了去掉图像抖动现象,可以使用dither选项。

例子1

>>>from PIL import Image

扫描二维码关注公众号,回复: 2634131 查看本文章

>>>im01 = Image.open("D:\\Code\\Python\\test\\img\\test01.jpg")

>>>im01.mode

'RGB'

>>>im_c = im01.convert("L")

>>>im_c.mode

'L'

将“RGB”模式的im01图像,转换为“L”模式的im_c图像。

定义2im.convert(“P”,**options)  image

含义2:这个与第一个方法定义一样,但是当“RGB”图像转换为8位调色板图像时能更好的处理。可供选择的选项为:

Dither=. 控制颜色抖动。默认是FLOYDSTEINBERG与邻近的像素一起承担错误。不使能该功能,则赋值为NONE

Palette=. 控制调色板的产生。默认是WEB,这是标准的216色的“web palette”。要使用优化的调色板,则赋值为ADAPTIVE

Colors=. 当选项paletteADAPTIVE时,控制用于调色板的颜色数目。默认是最大值,即256种颜色。

例子2

 

定义3im.convert(mode,matrix)  image

含义3:使用转换矩阵将一个“RGB”图像转换为“L”或者“RGB”图像。变量matrix4或者16元组。

例子3:下面的例子将一个RGB图像(根据ITU-R709线性校准,使用D65亮度)转换到CIE XYZ颜色空间:

>>>from PIL import Image

>>> im01 =Image.open("D:\\Code\\Python\\test\\img\\test01.jpg")

>>>im01.mode

'RGB'

>>>rgb2xyz = (

             0.412453,0.357580, 0.180423, 0,

                       0.212671,0.715160, 0.072169, 0,

                       0.019334,0.119193, 0.950227, 0 )

 

>>>im_c3 = im01.convert("L", rgb2xyz)

>>>im_c3.show()

>>>im_c3.mode

'L'

2、  Copy

定义:im.copy()  image

含义:拷贝这个图像。如果用户想粘贴一些数据到这张图,可以使用这个方法,但是原始图像不会受到影响。

例子:

>>>from PIL import Image

>>> im01 =Image.open("D:\\Code\\Python\\test\\img\\test01.jpg")

>>>im_copy = im01.copy()

图像im_copyim01完全一样。

3、  Crop

定义:im.crop(box)  image

含义:从当前的图像中返回一个矩形区域的拷贝。变量box是一个四元组,定义了左、上、右和下的像素坐标。

这是一个懒操作。对源图像的改变可能或者可能不体现在裁减下来的图像中。为了获取一个分离的拷贝,对裁剪的拷贝调用方法load()

例子:

>>>from PIL import Image

>>> im01 =Image.open("D:\\Code\\Python\\test\\img\\test01.jpg")

>>> box= [0, 0, 100, 100]

>>>im_crop = im01.crop(box)

>>> im_crop.mode

'RGB'

>>>im_crop.size

(100, 100)

4、  Draft

定义:im.draft(mode,size)

含义:配置图像文件加载器,使得返回一个与给定的模式和尺寸尽可能匹配的图像的版本。例如,用户可以使用这个方法,在加载一个彩色JPEG图像时将其转换为灰色图像,或者从一个PCD文件中提取一个128x192的版本。

注意:这个方法会适时地修改图像对象(精确地说,它会重新配置文件的读取器)。如果图像已经被加载,那这个方法就没有作用了。

例子:

>>>from PIL import Image

>>> im01 =Image.open("D:\\Code\\Python\\test\\img\\test01.jpg")

>>>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'

5、  Filter

定义:im.filter(filter)  image

含义:返回一个使用给定滤波器处理过的图像的拷贝。可用滤波器需要参考ImageFilter模块。

例子:

>>> from PIL import Image

>>> im01 =Image.open("D:\\Code\\Python\\test\\img\\test01.jpg")

>>>im_filter = im01.filter(ImageFilter.BLUR)

>>>im_filter.show()

图像im_filterim01变得有些模糊了。

6、  Fromstring

定义:im.fromstring(data)

  im.fromstring(data, decoder,parameters)

含义:与函数fromstring()一样,但是这个方法会将data加载到当前的图像中。

例子:

7、  Getbands

定义:im.getbands() tuple of strings

含义:返回包括每个通道名称的元组。例如,对于RGB图像将返回(“R”,“G”,“B”)。

例子:

>>>from PIL import Image

>>> im01 =Image.open("D:\\Code\\Python\\test\\img\\test01.jpg")

>>>im01.getbands()

('R', 'G', 'B')

8、  Getbbox

定义:im.getbbox()  4-tuple or None

含义:计算图像非零区域的包围盒。这个包围盒是一个4元组,定义了左、上、右和下像素坐标。如果图像是空的,这个方法将返回空。

例子:

>>>from PIL import Image

>>>im01 = Image.open("D:\\Code\\Python\\test\\img\\test01.jpg")

>>>im01.getbbox()

(0, 0, 1024,768)

9、  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)返回一个(countcolor)元组的无序list,其中count是对应颜色在图像中出现的次数。

如果变量maxcolors的值被超过,该方法将停止计算并返回空。变量maxcolors默认值为256。为了保证用户可以获取图像中的所有颜色,you can pass in size[0]*size[1](请确保有足够的内存做这件事)。

例子:

>>>from PIL import Image

>>> im01= Image.open("D:\\Code\\Python\\test\\img\\test01.jpg")

>>>im01.getcolors()

>>>im01.getcolors(256)

>>> ls= im01.getcolors(255)

>>>len(ls)

 

Traceback (mostrecent call last):

  File "<pyshell#201>", line 1,in <module>

    len(ls)

TypeError:object of type 'NoneType' has no len()

 

不知道为什么图像im01.getcolors()返回为空,这个后续需要进一步研究。

10、             Getdata

定义:im.getdata()  sequence

含义:以包含像素值的sequence对象形式返回图像的内容。这个sequence对象是扁平的,以便第一行的值直接跟在第零行的值后面,等等。

注意:这个方法返回的sequence对象是PIL内部数据类型,它只支持某些sequence操作,包括迭代和基础sequence访问。使用list(im.getdata()),将它转换为普通的sequence

例子:

>>>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对象的每一个元素对应一个像素点的RGB三个值。

11、             Getextrema

定义:im.getextrema()  2-tuple

含义:返回一个2元组,包括该图像中的最小和最大值。

例子:

>>>from PIL import Image

>>>im01 = Image.open("D:\\Code\\Python\\test\\img\\test01.jpg")

>>>im01.getextrema()

((0, 255), (0,255), (0, 255))

该方法返回了R/G/B三个通道的最小和最大值的2元组。

12、             Getpixel

定义:im.getpixel(xy)  value or tuple

含义:返回给定位置的像素值。如果图像为多通道,则返回一个元组。

注意:该方法执行比较慢;如果用户需要使用python处理图像中较大部分数据,可以使用像素访问对象(见load),或者方法getdata()

例子:

>>>from PIL import Image

>>> im01 =Image.open("D:\\Code\\Python\\test\\img\\test01.jpg")

>>>im01.getpixel((0,0))

(11, 113, 198)

>>>im01.getpixel((1,1))

(10, 112, 197)

>>>r,g,b = im01.split()

>>>r.getpixel((0,0))

11

13、             Histogram

定义1im.histogram() list

含义1:返回一个图像的直方图。这个直方图是关于像素数量的list,图像中的每个象素值对应一个成员。如果图像有多个通道,所有通道的直方图会连接起来(例如,“RGB”图像的直方图有768个值)。

二值图像(模式为“1”)当作灰度图像(模式为“L”)处理。

例子1

>>>from PIL import Image

>>> im01 =Image.open("D:\\Code\\Python\\test\\img\\test01.jpg")

>>> ls= im01.histogram()

>>>len(ls)

768

>>>ls[0]

359

>>>ls[256]

295

>>>ls[767]

109953

图像im01RGB图像,所以有768项。

定义2im.histogram(mask) list

含义2:返回图像中模板图像非零地方的直方图。模板图像与处理图像的尺寸必须相同,并且要么是二值图像(模式为“1”),要么为灰度图像(模式为“L”)。

例子2

>>>from PIL import Image

>>> im01 =Image.open("D:\\Code\\Python\\test\\img\\test01.jpg")

>>>r,g,b = im01.split()

>>>r.mode

'L'

>>> ls= im01.histogram(r)

>>>len(ls)

768

>>>ls[0]

0

>>>ls[256]

248

>>>ls[767]

109953

14、             Load

定义:im.load()

含义:为图像分配内存并从文件中加载它(或者从源图像,对于懒操作)。正常情况下,用户不需要调用这个方法,因为在第一次访问图像时,Image类会自动地加载打开的图像。

New in 1.1.6)在1.1.6及以后的版本,方法load()返回一个用于读取和修改像素的像素访问对象。这个访问对象像一个二维队列,如:

pix = im.load()

print pix[x, y]

pix[x, y] =value

通过这个对象访问比方法getpixel()putpixel()快很多。

例子:

>>>from PIL import Image

>>>im01 = Image.open("D:\\Code\\Python\\test\\img\\test01.jpg")

>>> pix= im01.load()

>>>pix[0,0]

(11, 113, 198)

15、             Offset

定义:im.offset(xoffset,yoffset)  image

含义:(不赞成)返回按照给定位置的偏移对应的图像的拷贝。数据延续到图像的边缘。如果变量yoffset没有赋值,将假设其与变量xoffset一样。

不赞成使用这个方法,在PIL 1.2版本中去掉该方法。新的代码将使用ImageChops模块中的offset()函数。

例子:

>>>from PIL import Image

>>>im01 = Image.open("D:\\Code\\Python\\test\\img\\test01.jpg")

>>> img= im01.offset(1,1)

 

Traceback (mostrecent call last):

  File "<pyshell#38>", line 1,in <module>

    img = im01.offset(1,1)

  File"C:\Python27\lib\site-packages\PIL\Image.py", line 1246, in offset

    "Please call ImageChops.offset()instead.")

Exception:offset() has been removed. Please call ImageChops.offset() instead.

由此可见,该版本中已经去掉了方法offset()

猜你喜欢

转载自blog.csdn.net/qq_37816453/article/details/80434987
今日推荐