细心的读者应该可以发现,这个抠鼻屎的图片和笔者头像并不完全一样 。在血色方面,笔者的头像确实要差几分 。
注意:笔者在日常生活中可不是天天在大街上抠鼻屎的那种 。
(2)按尺寸缩放按尺寸缩放是通过Image对象的thumbnail()方法实现的,这里不同于前面直接通过Image调用方法,而是使用Image的具体实例im2调用thumbnail方法,从而对im2直接进行处理 。具体代码如下:
from PIL import Image# 打开图像im1 = Image.open('xx.jpg')# 复制图像im2 = im1.copy()# 将复制后的图像进行缩放,传入一个元组im2.thumbnail((100, 100))# 输出图像大小print("im1的大小", im1.size)print('im2的大小', im2.size)1
这里缩放图像并不会对图像进行变形,即显示效果是一样的 。这里就不放效果图了,输入结果如下:
im1的大小 (960, 960)im2的大小 (100, 100)1
1.5、图像的剪切与粘贴(1)图像粘贴粘贴的实现主要是通过Image对象的paste(im, box, mask)方法,其中im为Image对象;box为要粘贴到的区域;mask为遮罩(我也不知道啥是遮罩) 。其中box的参数有三种形式:
(x1, y1):将im左上角对齐(x1,y1)点,其余部分粘贴,超出部分抛弃
(x1, x2, y1, y2):将im粘贴至此区域
None:此时im必须与源图像大小一致
(2)裁剪图像裁剪主要通过Image对象的crop(box)方法实现,box同粘贴中一致 。
接下来我们做一个小练习,想将图像某个区域剪切下来,然后粘贴到另一个图像上:
from PIL import Image# 打开图像im = Image.open('nnz.jpg')# 复制两份im1 = im.copy()im2 = im.copy()# 剪切图片im_crop = im1.crop((200, 200, 400, 400))# 粘贴图片im2.paste(im_crop, (30, 30))im2.show()1
原图和效果图对比如下:
文章插图
貌美如花的娜娜的 。
1.4、图像旋转和格式转换(1)图像旋转图像旋转就非常简单了,简单的一句代码,通过Image对象调用rotate(),该方法返回被旋转图像的一个副本:
from PIL import Imageim = Image.open('nnz.jpg')# 旋转90度然后显示im.rotate(90).show()1
顺时针逆时针就不要问我了 。(2)格式转换convert:转换图像的模式
transpose:转换图像的格式
convert之前已经使用过了,这里就简单演示一下transpose的作用,transpose主要传入一些Image中的常量:
from PIL import Image# 打开图像im = Image.open('nnz.jpg')# 这里我也不知道注释啥了,总之效果和rotate(90)效果一样im.transpose(Image.ROTATE_90).show()1
效果图我也就不放了,给大家列出一些可以传入的常量和该常量的作用:文章插图
我也不知道这是哪门子的格式转换 。
1.5、分离和合并(1)分离这个是之前使用过的,通过Image对象的split()方法,将图像的RGB三个通道分离,并返回三个Image对象:
from PIL import Image# 打开图像im = Image.open('nnz.jpg')# 分离通道,返回3个Image对象r, g, b = im.split()1
三个通道的效果图如下:文章插图
(2)合并合并是通过Image.merge(mode, bands)方法实现的,其中mode为模式,bands为通道列表,传入一个列表类型数据 。下面我实现以下小新多年来的愿望:
from PIL import Image# 打开小新.jpg和娜娜的.jpgim1 = Image.open('娜娜子.jpg')im2 = Image.open('小新.jpg')# 让im2大小和im1一样im2.resize(im1.size)# 将两个图像分别分离r1, g1, b1 = im1.split()r2, g2, b2 = im2.split()# 合并图像im3 = Image.merge('RGB', [r1, g2, b1])im3.show()12
效果图如下,看到这么美的图片,小新一定会感谢我的:文章插图
到这里,我们就把Image模块的大致内容讲解完了,接下来我们来了解PIL中更丰富的功能 。
二、ImageFilterImageFilter中提供了很多常用的滤镜功能,
2.1、高斯模糊
高斯模糊也叫高斯平滑,是啥我也不知道,反正听名字就是模糊 。我们结合上面的内容完成一个小案例:
from PIL import Image, ImageFilter# 打开图像im1 = Image.open('iron_man.jpg')# 创建一个im1两倍宽的图像img = Image.new('RGB', (im1.width*2, im1.height), 'red')# 高斯模糊处理im2 = im1.filter(ImageFilter.GaussianBlur)# 将im1粘贴到img上img.paste(im1, (0, 0))# 将im2(高斯模糊后的图像)粘贴到img上img.paste(im2, (im1.width, 0))img.show()12
推荐阅读
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 茶的历史茶字起源,茶叶茶字的由来和历史演变的介绍
- linux下开发基于.net的三维绘图程序
- 春节关于茶的习俗,蒙舍蛮的品饮习俗
- Visual Studio代码扩展入门:用于C/C++静态分析的VS Code配置
- 茶叶水浇花好吗,茶叶渣的用途
- 附代码 什么是Python的迭代器和生成器?
- NLP中的文本分析和特征工程
- 山东取暖费发放标准是怎样的?
- 三大平原中面积最大的是什么?
- 《大王饶命》的吕小鱼结局是什么?