Python学习记录(一)PIL库对于图像操作方法的简单整理
Python学习记录(一)PIL库对于图像操作方法的简单整理
首先对PIL库进行一个简单的介绍:Python图像库PIL(Python Image Library)是python的第三方图像处理库,由于其强大的功能和众多的使用人数而广为人知,主要用于对图像进行处理。本文主要从以下几个方面对PIL库的使用进行整理:
目录
- Python学习记录(一)PIL库对于图像操作方法的简单整理
- 一.图像读取、创建方法
- 1.open
- 2.save、copy
- 3.读取图片信息
- 4.new
- 二.图像处理方法
- 1.convert
- 2.resize、rotate
- 3.crop
- 4.paste
- 5.split
- 三.图像增强、过滤方法
- 1.Imagefilter
- 2.ImageEnhance
一.图像读取、创建方法
二.图像处理方法
三.图像增强、过滤方法
一.图像读取、创建方法
PIl库中的image 类是核心类,也是我们最常使用,功能最多的模块。我们首先通过几个函数来了解使用image类进行图像读取和创建的方法。
1.open
我们可以通过这一函数来进行图片的读取。
代码如下
from PIL import Image #调用库
img=Image.open("dog.jpg") #打开在当前目录下的一张图片
img.show()
运行结果
2.save、copy
我们可以用这一函数来进行图片的保存或格式的转换
img.save("dog.png") #将图片保存为png格式
img1 = Image.open("dog.png") #新的图片
此外,我们还可以使用copy对图片进行拷贝。
img_copy = img.copy()
图像img_copy和img完全一样。
3.读取图片信息
print(img.format) #打印图片的格式
print(img.size) #打印图片的大小
print(img.mode) #打印图片的模式属性
运行结果
需要提到的是,常见的mode 有 “L” (luminance) 表示灰度图像,“RGB”表示真彩色图像,和 “CMYK” 表示出版图像,表明图像所使用像素格式。
4.new
我们还可以利用new方法来创建一个图片,代码如下。
new_img= Image.new("RGB", (128, 128), "red") #创建一个图片,变量分别为mode,size,color
new_img.show() #展示图片
结果如下
可以看到,使用给定的模式和大小以及颜色,我们生成了一个红色的方块。值得一提的是,对于单通道图像,变量color只给定一个值;对于多通道图像,变量color给定一个元组(每个通道对应一个值)。我们也可以给变量color赋值为“red”、“green”等。如果没有对变量color赋值,图像内容将会被全部赋值为0(为黑色)。
new_img= Image.new("RGB", (128, 128)) #没有给color变量赋值
new_img.show() #展示图片
如此展示出的是一个黑色的方块。
二.图像处理方法
下面主要讲讲如何调整图片的各类属性来达到图像处理的目的。
1.convert
将当前图像转换为其他模式,并且返回新的图像。
img2=img.convert(mode) #转换模式img2.show() #展示转换后的图像
我们可以尝试将mode进行调整。可以发现:
当模式为“1”时,转化为为二值图像,非黑即白,每个像素用8个bit表示,0表示黑,255表示白。
当模式为“RGB”时,是通过对红®、绿(G)、蓝(B)三个颜色通道的变化以及它们相互之间的叠加来得到各式各样的颜色的,每个通道的值在0~255之间。
当模式为“L”时,转化为为灰色图像,每个像素用8个bit表示,0表示黑,255表示白,0~255代表不同的灰度。需要注意的是,在PIL中,RGB是通过以下公式转化为L的:
L = R * 299/1000 + G * 587/1000 + B * 114/1000
运行结果分别如下
2.resize、rotate
图像的尺寸,按照像素数计算,它的返回值为宽度和高度的二元组(width, height)。
img3=img.resize((300,200)) #调整图像大小
img3.show() #展示调整大小后的图像
print(img3.size) #打印图像尺寸
我们还可以对图像进行旋转
img4=img.rotate(angle) #调整图像旋转角度
img4.show() #展示调整旋转角度后的图像
3.crop
我们可以使用crop对图片进行截取拷贝,代码如下。
box = (20, 30, 300, 200) #确定拷贝区域大小
img5 = img.crop(box) #拷贝截取区域
img5.show() #展示拷贝图像
变量box是一个四元组,定义了左、上、右和下的像素坐标。用来表示在原始图像中截取的位置坐标,如box(x1,y1,x2,y2)就表示在原始图像中以左上角(x1,y1)为坐标原点,截取一个(x2-x1)*(y2-y1)(像素为单位)的图像。
运行结果如下
4.paste
我们可以使用paste将一张图粘贴到另一张图像上,我们使用刚刚截取的图像来进行以下操作。
img.paste(img5, (100,100)) #将截取的图片黏贴到原图像上(100,100)坐标处
img.show() #展示黏贴后的图像
结果如下
我们也可以使用定义了左,上,右和下像素坐标的4元组,代码如下
img.paste(img5, (50, 50, 330, 220))
img.show()
但要注意的是使用4元组时,被粘贴的图像的尺寸必须与区域尺寸一样。
5.split
split可以返回当前图像各个通道组成的一个元组。例如,分离一个“RGB”图像将产生三个新的图像,分别对应原始图像的每个通道(红,绿,蓝),具体我们可以看一下下列代码
bands=img.split()
print(bands)
显示出如下数据:(<PIL.Image.Image image mode=L size=619x539 at 0x1E3CA46C888>, <PIL.Image.Image image mode=L size=619x539 at 0x1E3CA46CBC8>, <PIL.Image.Image image mode=L size=619x539 at 0x1E3CA4F43C8>)
分别对应我们分离出来的三个通道。
当然我们可以直接进行如下操作
r, g, b = img.split() #分离颜色通道
img6=Image.merge("RGB", (b, g, r)) #交换颜色
img6.show() #展示图片
需要提到的是merge函数,主要用于合并通道,表示为Image.merge(mode, bands),其中mode表示色彩,bands表示新的色彩通道。
结果如下:
我们还可以对分离出来的色彩通道进行调节,改变图片颜色,代码如下
r, g, b = im.split()
newg = g.point(lambda i: i * 1.3)#将G通道颜色值变为原来1.3倍
newb = b.point(lambda i: i > 100)#选择B通道值大于100的像素点
img7 = Image.merge("RGB",(r, newg, newb))
img7.show()
结果如下
关于图像处理还有许多操作,但限于篇幅在此不多加讲述,有机会再补充。
三.图像增强、过滤方法
1.Imagefilter
下面简单讲一下滤波操作,在这里我们要用到ImageFilter模块,在该模块中,预先定义了很多增强滤波器,预定义滤波器包括:BLUR、CONTOUR、DETAIL、EDGE_ENHANCE、EDGE_ENHANCE_MORE、EMBOSS、FIND_EDGES、SMOOTH、SMOOTH_MORE、SHARPEN。其中BLUR就是均值滤波,CONTOUR找轮廓,FIND_EDGES边缘检测,使用该模块时,需先导入。
from PIL import ImageFilter # 调取ImageFilter
img8 = img.filter(ImageFilter.BLUR) #均值滤波
img9 = img.filter(ImageFilter.CONTOUR) #找轮廓
img10 = img.filter(ImageFilter.FIND_EDGES) #边缘检测
img8.show()
img9.show()
img10.show()
具体效果如下(还挺有趣)
其他效果可以逐一尝试,在此不多加展示。
2.ImageEnhance
ImageEnhance类提供5种高级图像增强功能,分别为enhance、Color、Contrast、Brightness、Sharpness,分别用于增强图像属性,调整颜色平衡,调整图像对比度,调整图像亮度,调整图像锐度。示例代码如下
from PIL import ImageEnhance #导入ImageEnhance模块
img11 = ImageEnhance.Contrast(img) #对原图像进行对比度调整
img11.enhance(10).show() #调整图像对比度为原来的10倍并展示
img12 = ImageEnhance.Sharpness(img) #对原图像进行锐度调整
img12.enhance(30).show() #调整图像锐度为原来的30倍并展示
结果如下
可以根据自己需求进行尝试。
至此,对PIL库的使用方法介绍就告一段落了(狗子都被我玩坏了),PIL库的确是一个强大的图像处理库,还有很多方法和更高级的操作暂时还在学习,今天主要对其进行了简单的介绍,更多还要在实际使用中进行学习。如果有什么错误或者讲的不对的地方欢迎大家指正。
Python学习记录(一)PIL库对于图像操作方法的简单整理相关推荐
- pygame是python的一个库吗,python学习pygame,,基本库导入impor
python学习pygame,,基本库导入impor 基本库导入 import pygame import sys from pygame.locals import * 初始化 pygame.ini ...
- python自带的PIL库扩展图片大小给图片加上文字描述
利用python自带的PIL库扩展图片大小给图片加上文字描述.大多都是库函数调用,只是给定图片宽度后计算文字所需行数的代码需要写. 代码比较丑,but it works. #!/usr/bin/env ...
- Python学习记录day6-反射、常用模块
Python学习记录day6-反射.常用模块 @(学习)[python] Python学习记录day6-反射常用模块 反射 常用模块 1 sys System-specific parameters ...
- Opencv+Python学习记录9:掩膜(掩码)的使用(内附详细代码)
一,基本概念 OpenCV中的很多函数都会指定一个掩模,也被称为掩码,例如: 计算结果=cv2.add(参数1,参数2,掩模) 当使用掩模参数时,操作只会在掩模值为非空的像素点上执行,并将其他像素点的 ...
- 蜗牛一步一步地往上爬的Python学习记录
Python学习记录 前言 简介 基础知识 类型变量 高级特性 函数式编程 高阶函数 偏函数 装饰器decorator 匿名函数 前言 第一,绝对不断更: 第二,绝对认真写: 第三,绝对撰写的公正漂亮 ...
- Python 随笔:用 PIL 库读取图像文件像素长宽大小
Python 随笔:用 PIL 库读取图像文件像素宽高大小 1.前言 安装 PIL 库(全称是pillow),所以安装命令上的名称是pillow pip install pillow 2. 使用pil ...
- Python学习记录day3
2019独角兽企业重金招聘Python工程师标准>>> Python学习记录 day3 今天是银角大王武sir讲课.先回顾了上节课所学,然后讲到了面向对象思想. set set是一个 ...
- python:程序猿的方式在元宵佳节之际,带你设计【东方明珠】动画浪漫烟花秀(python编程利用Tkinter+PIL库)
python:程序猿的方式在元宵佳节之际,带你设计[东方明珠]动画浪漫烟花秀(python编程利用Tkinter+PIL库) 目录 设计动画展示 设计思路 核心代码 设计动画展示 设计思路 核心代码 ...
- Python学习笔记:requests库
Python学习笔记:requests库 利用requests这个功能强大的网络请求库,可以像浏览器一样发送各种HTTP请求来获取网站的数据. 一.运行环境 1.系统版本:Windows 10 2.P ...
最新文章
- 为什么阿里不允许用Executors创建线程池
- 开发小程序商城必看:社交电商的销售玩法
- skipping non-radio button in group解决方法
- linux c 字符串查找函数 strstr strcasestr
- Cmd Markdown 公式指导手册
- IDEA Error:java: Compilation failed: internal java compiler error
- java对象的访问定位_JVM创建对象及访问定位过程详解
- H.264 中的相关问题
- python如何循环使用input_python基础知识input到while循环
- 中位数和顺序统计量(第9章)
- 黑苹果 惠普笔记本电池补丁_小米笔记本Pro 黑苹果 改装内置WIFI和蓝牙
- win10打开计算机出现马赛克,传授win10系统在线播放视频出现马赛克的技巧
- 斯坦福大学公开课第四课 Views 视图
- cad2017单段线_cad2017新功能介绍
- DOM系列之scroll系列
- w10计算机运行特别卡,win10更新后很卡怎么办_win10更新后电脑特别卡的解决方法...
- 服务器中内存不够的原因
- 【UV打印机】电气之负压系统(一)
- 几种常见的RAID工作模式讨论
- 在 Windows 安装期间将 MBR 磁盘转换为 GPT 磁盘
热门文章
- 怎样给pdf文件添加水印
- ChatGPT 被居心不良的人拿去搞黄色了...
- 浅谈“孔乙己的长衫“是脱不下来还是难脱下?
- Java网络安全常见面试题
- 【语言-c#】显示设置-设置了缩放比列后,如何处理鼠标光标位置和屏幕大小
- 看P2P流媒体之风生水起
- Oracle:ORA-24324: 未初始化服务句柄 ORA-24323: 不允许此值 ORA-01090: 正在关闭 - 不允许连接
- 贵州省铜仁市谷歌卫星地图下载
- 中秋节活动策划PPT模板
- 星际开图挂_星际的打开全图的秘籍是多少