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_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()
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))
将红色的图,粘贴到了黑色图(20,20,40,40)位置
定义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()
注:
- 对于多通道的图像,如果变量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()
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()