Python图像处理库PIL的ImageChops模块介绍

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

大多数通道操作只用于8位图像(比如“L”模式和“RGB”模式)。

一、ImageChops模块的函数

大多数通道操作有一个或者两个图像参数,返回一个新的图像。

1、  Constant

定义:constant(image,value) ⇒ image

含义:返回一个和给定图像尺寸一样的一层,该层被给定的像素值填充。

例子:

>>>from PIL import ImageChops

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

>>> im02.mode

'RGB'

>>>im02.getpixel((0,0))

(124, 127, 108)

>>> im= ImageChops.constant(im02, 100)

>>>im.mode

'L'

>>>im.getpixel((0,0))

100

>>>im.getpixel((100,100))

100

图像02为“RGB”图像,方法constant()只返回一个层,即图像im模式为“L”,且所有值都为给定的100。

2、  Duplicate

定义:duplicate(image) ⇒ image

含义:返回给定图像的拷贝。

例子:

>>>from PIL import ImageChops

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

>>>im02.mode

'RGB'

>>>im02.getpixel((100,100))

(147, 149, 128)

>>> im = ImageChops.duplicate(im02)

>>>im.mode

'RGB'

>>>im.getpixel((100,100))

(147, 149, 128)

3、  Invert

定义:invert(image) ⇒ image

含义:返回最大值255减去当前值的图像。

例子:

>>>from PIL import ImageChops

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

>>>im02.mode

'RGB'

>>>im02.getpixel((100,100))

(147, 149, 128)

>>> im= ImageChops.invert(im02)

>>>im.mode

'RGB'

>>>im.getpixel((100,100))

(108, 106, 127)

图像im如下:

                             

4、  Lighter

定义:lighter(image1, image2) ⇒ image

含义:逐像素比较,选择较大值作为新图像的像素值。

例子:

>>>from PIL import ImageChops

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

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

>>> im =ImageChops.lighter(im01, im02)

>>>im01.getpixel((100,100))

(42, 131, 211)

>>>im02.getpixel((100,100))

(147, 149, 128)

>>>im.getpixel((100,100))

(147, 149, 211)

图像im如下:

 

5、  Darker

定义:darker(image1,image2) ⇒ image

含义:逐像素比较,选择较小值作为新图像的像素值。

例子:

>>>from PIL import ImageChops

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

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

>>> im= ImageChops.darker(im01, im02)

>>>im01.getpixel((100,100))

(42, 131, 211)

>>>im02.getpixel((100,100))

(147, 149, 128)

>>>im.getpixel((100,100))

(42, 131, 128)

图像im如下:

 

6、  Difference

定义:difference(image1, image2) ⇒ image

含义:返回两幅图像逐像素差的绝对值形成的图像。

例子:

>>>from PIL import ImageChops

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

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

>>> im= ImageChops.difference (im01, im02)

>>>im01.getpixel((100,100))

(42, 131, 211)

>>>im02.getpixel((100,100))

(147, 149, 128)

>>>im.getpixel((100,100))

(105, 18, 83)

图像im如下:

 

7、  Multiply

定义:multiply(image1, image2) ⇒ image

含义:Superimposes twoimages on top of each other.如果与一张纯黑图片相乘,其结果是黑色的。如果与一张纯白图像相乘,其结果是不确定的。

out = image1 *image2 / MAX

例子:

>>>from PIL import ImageChops

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

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

>>> im= ImageChops.multiply (im01, im02)

>>>im01.getpixel((100,100))

(42, 131, 211)

>>>im02.getpixel((100,100))

(147, 149, 128)

>>>im.getpixel((100,100))

(24, 76, 105)

图像im如下:

 

8、  Screen

定义:screen(image1,image2) ⇒ image

含义:Superimposes twoinverted images on top of each other.

out = MAX -((MAX - image1) * (MAX - image2) / MAX)

例子:

>>>from PIL import ImageChops

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

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

>>> im = ImageChops.screen(im01,im02)

>>>im01.getpixel((100,100))

(42, 131, 211)

>>>im02.getpixel((100,100))

(147, 149, 128)

>>>im.getpixel((100,100))

(165, 204, 234)

图像im为:

 

9、  Add

定义:add(image1,image2, scale, offset) ⇒ image

含义:两个图像对应像素值相加,然后除以变量offset,并且再加上变量offset。如果忽略,变量scale为1.0,变量offset为0.0。

out = (image1 +image2) / scale + offset

例子:

>>>from PIL import ImageChops

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

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

>>> im= ImageChops.add(im01, im02)

>>>im01.getpixel((100,100))

(42, 131, 211)

>>>im02.getpixel((100,100))

(147, 149, 128)

>>>im.getpixel((100,100))

(165, 204, 234)

图像im为:

 

10、             Subtract

定义:subtract(image1, image2, scale, offset) ⇒ image

含义:两个图像对应像素值相减,然后除以变量offset,并且再加上变量offset。如果忽略,变量scale为1.0,变量offset为0.0。

out = (image1 -image2) / scale + offset

例子:

>>>from PIL import ImageChops

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

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

>>> im= ImageChops.subtract (im01, im02)

>>>im01.getpixel((100,100))

(42, 131, 211)

>>>im02.getpixel((100,100))

(147, 149, 128)

>>>im.getpixel((100,100))

(0, 0, 83)

图像im为:

 

11、             Blend

定义:blend(image1, image2, alpha) ⇒ image

含义:与Image模块中的函数blend()一样,根据变量alpha合成两张图像。

例子:

>>>from PIL import ImageChops

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

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

>>> im= ImageChops.blend(im01, im02, 0.7)

图像im为:

 

12、             Composite

定义:composite(image1, image2, mask) ⇒ image

含义:与Image模块中的函数composite()一样,根据变量mask合成两张图像。变量  mask的模式为“1”,“L”或者“RGBA”。这三个参数的尺寸必须一样大。

例子:

>>>from PIL import ImageChops

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

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

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

>>> im_r = ImageChops.composite(im01,im02, r)

>>> im_g= ImageChops.composite(im01, im02, g)

>>> im_b= ImageChops.composite(im01, im02, b)

图像im_r如下:

 

图像im_g如下:

 

图像im_b如下:

 

13、             Offset

定义:offset(image,xoffset, yoffset) ⇒ image

  offset(image, offset) ⇒ image

含义:返回一个图像数据按照变量offset做了偏移的图像。Datawraps around the edges.如果变量yoffset缺省,它被假设与变量xoffset一样。

例子:

>>>from PIL import ImageChops

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

>>> im= ImageChops.offset(im01, 200, 300)

图像im是将图像im01的左上角移到了坐标(200,300)的地方,右边超出边界的将移动到左边,下边超出边界的将移动到上边。图像im如下:

 

猜你喜欢

转载自blog.csdn.net/qq_38839677/article/details/81912194