python3中PIL库中Image.new方法和paste方法

python2中提供了PIL基础的图像数据出来模块,在python3中更名为了pillow模块,名字虽然发生了改变,但是提供的方法和功能都是一样的,对于日常基础的图像数据处理分析来说是足够用了的。

Image.new

Image.new()方法,顾名思义,是用来new一个新的图像,具体参数如下:

Image.new(mode, size, color=0)
  • mode:模式,通常用"RGB"这种模式,如果需要采用其他格式,可以参考博文:PIL的mode参数
  • size:生成的图像大小
  • color:生成图像的颜色,默认为0,即黑色。
    举个栗子:
from PIL import Image
import matplotlib.pyplot as plt

img = Image.new("RGB",(32,32),(255,255,255))
plt.imshow(img)

生成的图片如下:
img
另外,颜色参数的输入还可以用英文单词表示,或者十六进制的颜色码:

img_red = Image.new("RGB",(32,32),"red")
img_green = Image.new("RGB",(32,32),"#00FF00")
plt.subplot(1,2,1)
plt.imshow(img_red)
plt.subplot(1,2,2)
plt.imshow(img_green)
plt.show()

red and green

paste方法

paste,中文就是粘贴的意思,所以该方法就是将paste方法中,传入的图像粘贴在原图像上。

img.paste(im, box=None, mask=None)

定义1:im.paste(image,box)

含义1:将一张图粘贴到另一张图像上。变量box或者是一个给定左上角的2元组,或者是定义了左,上,右和下像素坐标的4元组,或者为空(与(0,0)一样)。如果给定4元组,被粘贴的图像的尺寸必须与区域尺寸一样。
如果模式不匹配,被粘贴的图像将被转换为当前图像的模式。

举个栗子:

from PIL import Image
import matplotlib.pyplot as plt
img = Image.new("RGB",(100,100))
img_small = Image.new("RGB",(20,20),"red")
img.paste(img_small,(20,20))
plt.imshow(img)
plt.show()

这里的

img.paste(img_small,(20,20))

相当于

img.paste(img_small,(20,20,40,40))

paste1
将红色的图,粘贴到了黑色图(20,20,40,40)位置
paste2

定义2:im.paste(color,box)

含义2:它与定义1一样,但是它使用同一种颜色填充变量box对应的区域。对于单通道图像,变量colour为单个颜色值;对于多通道,则为一个元组。
栗子2:

img = Image.new("RGB",(100,100))
img.paste("red",(10,10,30,30))
plt.imshow(img)
plt.show()

paste3 paste4
注:

  • 对于多通道的图像,如果变量color只给定一个数值,将只会应用于图像的第一个通道。如果是“RGB”模式的图像,将应用于红色通道。
  • 这里的坐标不能简写,必须写全,不然程序只知道paste图像右上角的位置,而不知道范围。

定义3:im.paste(image,box, mask)

含义3:与定义1一样,但是它使用变量mask对应的模板图像来填充所对应的区域。可以使用模式为“1”、“L”或者“RGBA”的图像作为模板图像。模板图像的尺寸必须与变量image对应的图像尺寸一致。 如果变量mask对应图像的值为255,则模板图像的值直接被拷贝过来;如果变量mask对应图像的值为0,则保持当前图像的原始值。变量mask对应图像的其他值,将对两张图像的值进行透明融合。
注意:如果变量image对应的为“RGBA”图像,即粘贴的图像模式为“RGBA”,则alpha通道被忽略。用户可以使用同样的图像作为原图像和模板图像。

栗子3:

img = Image.new("RGB",(100,100))
img_mask = Image.new('1',(20,20))
img_mask.paste("white",(10,10,15,15))
img_small = Image.new("RGB",(20,20),"red")
img.paste(img_small,(30,30),img_mask)
plt.imshow(img)
plt.show()

paste5 paste6

mask图像为:
在这里插入图片描述
注:mask掩膜,即提取感兴趣区域进行处理,mask图像需要和被粘贴的图像大小相同,mask图像中黑色的部分会保留原数据,白色部分为感兴趣区域,会把被paste图像的对应区域的数据paste到目标图像上。
换句话说,利用mask,首先将被paste图像先与mask图像“相乘”,规定0为黑色,1为白色,再将“乘积”paste到目标图像上。
如上图,原本被paste的图像大小是20*20的,利用mask后,只有原被粘贴图像上(10,10,15,15)范围的元素被paste到目标图像上。

定义4:im.paste(colour,box, mask)

含义4:与定义3一样,只是使用变量colour对应的单色来填充区域。
栗子4:

img = Image.new("RGB",(100,100))
img_mask = Image.new('1',(20,20))
img_mask.paste("white",(10,10,15,15))
img.paste("blue",(30,30),img_mask)
plt.imshow(img)
plt.show()

paste5 在这里插入图片描述

  • 56
    点赞
  • 218
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值