ImageChops
模块包含许多算术图像操作,称为通道操作(“chops”)。这些可用于各种目的,包括特殊效果,图像合成,算法绘画等。
首先在使用前要From PIL import ImageChops
ImageChops.add(img1, img2, scale = 1.0, offset = 0)
添加两个图像,按比例划分结果并添加偏移量。如果省略,则缩放默认为1.0,偏移为0.0。至少一个图像必须具有模式“1”(1位像素,黑白,每字节存储一个像素)
im = ImageChops.add(im1, im2, scale=2, offset=1) # 即out = ((image1 + image2) / scale + offset)
ImageChops.subtract(img1, img2, scale = 1.0, offset = 0)
减去两个图像,按比例划分结果并添加偏移量。如果省略,则缩放默认为1.0,偏移为0.0。至少一个图像必须具有模式“1”
im = ImageChops.subtract(im1, im2, scale=0.5, offset=1) # 即out = ((image1 - image2) / scale + offset)
ImageChops.add_modulo(img1, img2)
添加两个图像,不剪切结果。至少一个图像必须具有模式“1”。
im = ImageChops.add_modulo(im1, im2) # out = ((image1 + image2) % MAX)
ImageChops.subtract_modulo(img1, img2)
减去两个图像,不剪切结果。至少一个图像必须具有模式“1”。
im = ImageChops.subtract_modulo(im1, im2) # out = ((image1 - image2) % MAX)
ImageChops.constant(image, value)
填充具有给定灰度级的通道。
im = ImageChops.constant(im1, 100)
ImageChops.darker(img1, img2)
逐个像素地比较两个图像,并返回包含较暗值的新图像。至少一个图像必须具有模式“1”。
im = ImageChops.darker(im1, im2) # out= min(img1, img2)
ImageChops.difference(img1, img2)
返回两个图像之间逐像素差异的绝对值。至少一个图像必须具有模式“1”。
im = ImageChops.difference(im1, im2) # out = abs(image1 - image2)
ImageChops.invert(img)
反转图像(通道)
im0 = ImageChops.invert(im) # out = MAX - image
ImageChops.lighter(img1, img2)
逐个像素地比较两个图像,并返回包含较亮值的新图像。至少一个图像必须具有模式“1”。
im = ImageChops.lighter(im1, im2) # out= max(img1, img2)
ImageChops.logical_and(img1, img2)
两个图像之间的逻辑AND。至少一个图像必须具有模式“1”。
im1 = Image.open('timg.jpg').convert('1')
im2 = Image.open('IMG3.jpg').convert('1') # 如果我未将两张图片convert('1'),logical_and会报错
im = ImageChops.logical_and(im1, im2) # out = ((image1 and image2) % MAX)
ImageChops.logical_or(img1, img2)
两个图像之间的逻辑或。至少一个图像必须具有模式“1”。
im1 = Image.open('timg.jpg').convert('1')
im2 = Image.open('IMG3.jpg').convert('1')
im = ImageChops.logical_or(im1, im2) # out = ((image1 or image2) % MAX)
ImageChops.logical_xor(img1, img2)
两个图像之间的逻辑异或。至少一个图像必须具有模式“1”。
im1 = Image.open('timg.jpg').convert('1')
im2 = Image.open('IMG3.jpg').convert('1')
im = ImageChops.logical_xor(im1, im2) # out = ((bool(image1) != bool(image2)) % MAX)
ImageChops.multiply(img1, img2)
将两个图像叠加在一起。如果将图像与纯黑色图像相乘,则结果为黑色。如果乘以纯白图像,则图像不受影响。至少一个图像必须具有模式“1”。
im1 = Image.open('timg.jpg')
im2 = Image.open('IMG3.jpg')
im = ImageChops.multiply(im1, im2) # out = img1 * img2 / MAX
ImageChops.offset(img, xoffset, yoffset = None)
返回图像的副本,其中数据已被给定距离偏移。数据包裹在边缘。如果省略yoffset,则假定它等于xoffset。
im = ImageChops.offset(im2, 100,250)
图像为:
ImageChops.screen(img1, img2)
将两个倒置的图像叠加在一起。至少一个图像必须具有模式“1”。
im = ImageChops.screen(im1, im2) # out = MAX - ((MAX - image1) * (MAX - image2) / MAX)