没有合适的资源?快使用搜索试试~ 我知道了~
首页超全Python图像处理讲解(多图预警)
超全Python图像处理讲解(多图预警)
14 下载量 188 浏览量
更新于2023-03-03
评论 1
收藏 2.66MB PDF 举报
文章目录Pillow模块讲解一、Image模块1.1 、打开图片和显示图片1.2、创建一个简单的图像1.3、图像混合(1)透明度混合(2)遮罩混合1.4、图像缩放(1)按像素缩放(2)按尺寸缩放1.5、图像的剪切与粘贴(1)图像粘贴(2)裁剪图像1.4、图像旋转和格式转换(1)图像旋转(2)格式转换1.5、分离和合并(1)分离(2)合并二、ImageFilter2.1、高斯模糊2.2、其它滤镜三、ImageChops模块(图像合成)3.1、加法运算3.2、减法运算3.3、其它函数四、ImageEnhance模块(色彩、亮度)五、ImageDraw模块5.1、绘制简单形状(1)绘制直线(2)绘制
资源详情
资源评论
资源推荐
超全超全Python图像处理讲解(多图预警)图像处理讲解(多图预警)
文章目录文章目录Pillow模块讲解一、Image模块1.1 、打开图片和显示图片1.2、创建一个简单的图像1.3、图像混合(1)透明度混合(2)遮罩混合1.4、图像缩放(1)按像素缩放(2)按尺
寸缩放1.5、图像的剪切与粘贴(1)图像粘贴(2)裁剪图像1.4、图像旋转和格式转换(1)图像旋转(2)格式转换1.5、分离和合并(1)分离(2)合并二、ImageFilter2.1、高斯
模糊2.2、其它滤镜三、ImageChops模块(图像合成)3.1、加法运算3.2、减法运算3.3、其它函数四、ImageEnhance模块(色彩、亮度)五、ImageDraw模块5.1、绘制简单形状
(1)绘制直线(2)绘制矩形(3)绘制圆弧(4)绘制椭圆(5)绘制弦(6)绘制扇形(7)绘制多边形(8)绘制点5.2、绘制文字
Pillow模块讲解模块讲解
一、一、Image模块模块
1.1 、打开图片和显示图片、打开图片和显示图片
对图片的处理最基础的操作就是打开这张图片,我们可以使用Image模块中的open(fp, mode)方法方法,来打开图片。open方法接收两个参数,第一个是文件路径,第二个是模式。主要
的模式如下:
mode(模式)(模式) bands(通道)(通道) 说明说明
“1” 1 数字1,表示黑白二值图片,每个像素用0或1共1位二进制码表示
“L” 1 灰度图
“P” 1 索引图
“RGB” 3 24位真彩图
“RGBA” 4 “RGB”+透明通道
“CMYK” 4 印刷模式图像
更多的模式也就不说了,关于模式的模式的详细介绍我也不知道。这个open方法返回一个Image对象,mode也不是必须参数。打开图片代码如下:
from PIL import Image
# 打开图片
im = Image.open('test.jpg')
# 显示图片
im.show()
当然显示图片不是我们的重点,我们获取Image对象之后,就可以获取它的一些信息了。
print('图像的格式:', im.format)
print('图像的大小:', im.size)
print('图像的宽度:', im.width)
print('图像的高度:', im.height)
# 传入坐标的元组
print('获取某个像素点的颜色值:', im.getpixel(100, 100))
在我的环境中运行结果如下:
图像的格式: JPEG
图像的大小: (3968, 2976)
图像的宽度: 3968
图像的高度: 2976
获取某个像素点的颜色值: (198, 180, 132)
1.2、创建一个简单的图像、创建一个简单的图像
在Image模块中,提供了创建图像的方法。主要是通过**Image.new(mode, size, color)**实现,该方法传入三个参数:
mode:图像的创建模式
size:图像的大小
color:图像的颜色
用该方法可以创建一个简单的图像,之后我们可以通过save方法将图像保存:
from PIL import Image
# 创建一个简单的图像
im = Image.new('RGB', (100, 100), 'red')
# 保存这个图像
im.save('red.png')
生成图片如下:
1.3、图像混合、图像混合
((1)透明度混合)透明度混合
透明度混合主要是使用**Image中的blend(im1, im2, alpha)**方法,对该方法的解释如下:
im1:Image对象,在混合的过程中,透明度设置为(1-apha)
im2:Image对象,在混合的过程中,透明度设置为(apha)
alpha:透明度,取值是0-1。当透明度为0是,显示im1对象;当透明度为1时,显示im2对象
注意:im1和im2的大小必须一样,且mode都为RGB
代码实现如下:
from PIL import Image
# 打开im1
im1 = Image.open('pic.jpg').convert(mode='RGB')
# 创建一个和im1大小一样的图像
im2 = Image.new('RGB', im1.size, 'red')
# 混合图片,并显示
Image.blend(im1, im2, 0.5).show()
下面为原图和混合图的对比:
不得不说,我家艾斯真滴帅。
((2)遮罩混合)遮罩混合
接下来就是很迷的时刻了,我们可以通过Image.composite(im1, im2, mask)方法实现遮罩混合。三个参数都是方法实现遮罩混合。三个参数都是Image对象,该方法的作用就是对象,该方法的作用就是使用使用mask来混合来混合im1和和im2。我是听
不懂,你们能听懂最好给我讲一下。具体实现如下:
# 这句代码写了好多遍,我真不想写了
from PIL import Image
# 打开图像1
im1 = Image.open('pic1.jpg')
# 打开图像2
im2 = Image.open('pic2.jpg')
# 重新设置im2的大小
im2.resize(im1.size)
# 将图像2的三个色道分离,其中r、g、b都为Image对象
r, g, b = im2.split()
# 遮罩混合
Image.composite(im1, im2, b).show()
注意:im1、im2和mask的大小必须一样
im1、im2和遮罩混合效果对比如下:
依旧是我帅气的艾斯。
1.4、图像缩放、图像缩放
((1)按像素缩放)按像素缩放
按像素缩放通过Image.eval(im1, fun)方法方法实现,其中im1为我们老生常谈的Image对象了;第二个为一个方法(函数),该函数传入一个参数,即像素点。该函数会对图片中每个像
素点进行函数内的操作。下面我们对来简单使用一下这个方法:
from PIL import Image
# 打开一张图像
im = Image.open('抠鼻屎.jpg')
# 对该图像每个像素点进行*2处理
Image.eval(im, lambda x:x*2).show()
这里我使用的lambda表达式,当然一般也都是用lambda表达式,不过你也可以像下面这样写:
# 定义一个方法
def func(x):
return x*2
# 对图像im每个像素点进行func中的操作,其中func不能加()
Image.eval(im, func)
效果图如下:
细心的读者应该可以发现,这个抠鼻屎的图片和笔者头像并不完全一样。在血色方面,笔者的头像确实要差几分。
注意:笔者在日常生活中可不是天天在大街上抠鼻屎的那种。
((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)
这里缩放图像并不会对图像进行变形,即显示效果是一样的。这里就不放效果图了,输入结果如下:
im1的大小 (960, 960)
im2的大小 (100, 100)
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()
原图和效果图对比如下:
剩余11页未读,继续阅读
weixin_38623000
- 粉丝: 5
- 资源: 925
上传资源 快速赚钱
- 我的内容管理 收起
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
会员权益专享
最新资源
- zigbee-cluster-library-specification
- JSBSim Reference Manual
- c++校园超市商品信息管理系统课程设计说明书(含源代码) (2).pdf
- 建筑供配电系统相关课件.pptx
- 企业管理规章制度及管理模式.doc
- vb打开摄像头.doc
- 云计算-可信计算中认证协议改进方案.pdf
- [详细完整版]单片机编程4.ppt
- c语言常用算法.pdf
- c++经典程序代码大全.pdf
- 单片机数字时钟资料.doc
- 11项目管理前沿1.0.pptx
- 基于ssm的“魅力”繁峙宣传网站的设计与实现论文.doc
- 智慧交通综合解决方案.pptx
- 建筑防潮设计-PowerPointPresentati.pptx
- SPC统计过程控制程序.pptx
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论0