python图像处理 (二).PIL图像处理库学习②

实验环境:windows10,pyCharm

本文在如下博文的基础上进行:

python图像处理 (一).PIL图像处理库学习①

1、自定义创建图片

PIL除了可以从文件中打开一张图片,我们也可以创建一张图片

Image.new(mode,size) ⇒ image
Image.new(mode, size,color) ⇒ image

创建具有给定模式和大小的新图像。Size以(宽、高)-元组的形式给出,单位为像素。对于单通道图像,变量color只给定一个值;对于多通道图像,变量color给定一个元组(每个通道对应一个值),如果省略颜色参数,则图像将填充0(这通常对应于黑色)。如果颜色为None,则不初始化图像。如果你要在图像中粘贴或绘制东西,这是很有用的。

如下创建了一张三通道大小为255*255的红色图像:

from PIL import Image  #导入PIL库中的Image模块
im = Image.new("RGB", (128, 128), "red") #新建图像
im.show()

显示效果如下:

 2、复制图像

im.crop(box) ⇒ image

复制图像。如果您希望将内容粘贴到图像中,但仍保留原始内容,请使用此方法。

如下返回的和原图一样的:

from PIL import Image  #导入PIL库中的Image模块
im = Image.new("RGB", (225, 225), "red")  #新建图像
new_im = im.copy() #复制图像

3、裁剪图像

im.crop(box) ⇒ image

从当前图像返回矩形区域的副本。box是一个定义左、上、右和下像素坐标的4元组。
这是一个延迟操作。对源图像的更改可以反映在裁剪后的图像中,也可以不反映在裁剪后的图像中。要获得单独的副本,请调用裁剪副本上的load方法。

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

代码如下:

from PIL import Image  #导入PIL库中的Image模块
im = Image.open("images/mm.png")
im.show()  #显示原图
box = (100,100,300,300)  #裁剪区域
new_im = im.crop(box) #裁剪图片
new_im.show()  #显示裁剪区域

效果如下:

4、粘贴图像

im.paste(image, box)

将另一个图像粘贴到此图像中。box参数要么是一个给出左上角的2元组,要么是一个定义左、上、右和下像素坐标的4元组,要么没有(与(0,0)相同)。如果给定一个4元组,则粘贴图像的大小必须与区域的大小匹配。
如果模式不匹配,则将粘贴的图像转换为此图像的模式

如下打开一张图像然后在图像上粘贴一个自己创建的图像:

from PIL import Image  #导入PIL库中的Image模块
im1 = Image.open("images/mm.png")
box = (100,100,300,300)  #粘贴区域
im2 = Image.new('RGB',(200,200),'red')  #创建一张图像
im1.paste(im2,box) #在box区域粘贴im2图像
im1.show()

效果如下:

使用:im1.paste('red',box) 和上面效果相同

5、滤波器

im.filter(filter) ⇒ image

返回由给定过滤器过滤的图像的副本。有关可用过滤器的列表,请参见下表。

filtes

描述
BLUR 模糊滤镜
CONTOUR 轮廓滤镜
DETAIL 细节滤镜
EDGE_ENHANCE 边界增强滤镜
EDGE_ENHANCE_MORE 边界增强加强版滤镜
 EMBOSS 浮雕滤镜
FUND_EDGES 寻找边界滤镜
SMOOTH 平滑滤镜
SOOTH_MORE 平滑滤镜加强版
SHARPEN 锐化滤镜

如下举个小列子:

from PIL import Image  #导入PIL库中的Image模块
from PIL import ImageFilter  #导入PIL库中的ImageFilter模块
im = Image.open("images/mm.png").resize((255,255))
im.show()
BLUR_im = im.filter(ImageFilter.BLUR)
CONTOUR_im = im.filter(ImageFilter.CONTOUR)
DETAIL_im = im.filter(ImageFilter.DETAIL)
EMBOSS_im = im.filter(ImageFilter.EMBOSS)
DETAIL_im.show()
EMBOSS_im.show()
BLUR_im.show()
CONTOUR_im.show()

效果如下:

剩下的自己试下。

6、混合图像

Image.blend(image1, image2, alpha) ⇒ image

使用给定的两张图像及透明度变量alpha,插值出一张新的图像。这两张图像必须有一样的尺寸和模式。混合公式如下:

混合公式为:out = image1 (1.0 - alpha) + image2 alpha

若变量alpha为0.0,返回第一张图像的拷贝。若变量alpha为1.0,将返回第二张图像的拷贝。对变量alpha的值无限制。

例子如下:

from PIL import Image  #导入PIL库中的Image模块
from PIL import ImageFilter  #导入PIL库中的ImageFilter模块
im1 = Image.open("images/mm.png").resize((255,255)).convert('RGB') #为了和图像2的大小和模式一样重置大小和模式
im2 = Image.open("images/rb.jpg").resize((255,255))  ##为了和图像1的大小和模式一样重置大小和模式
#im1和im2按照第一张60%的透明度,第二张40%的透明度,合成为一张。
new_im = Image.blend(im1,im2,0.6) #混合图像
new_im.show()

效果如下:

 7、分离图像

im.split() ⇒ sequence

 返回当前图像各个通道组成的一个元组。例如,分离一个“RGB”图像将产生三个新的图像,分别对应原始图像的每个通道(红,绿,蓝)

测试代码如下:

from PIL import Image  #导入PIL库中的Image模块
im = Image.open("images/mm.png").resize((128,128)).convert('RGB')
r,g,b = im.split()
r.show()
g.show()
b.show()

 效果如下:

 差别不是很大,但还是有差别的。

发布了17 篇原创文章 · 获赞 70 · 访问量 9万+

猜你喜欢

转载自blog.csdn.net/zzqaaasss/article/details/91346463