Image类是Pillow库中最重要的类

安装Pillow包

pip install pillow

首先导入Image模块

from PIL import Image

打开图像

通过Image 类中的open ()方法,可以创建一个Image对象。语法格式:

im = Image.open(fp,mode="r")

fp:表示文件路径,字符串格式

mode: 可选参数

from PIL import Image
#打开图片
img=Image.open(r"./t53.png")
#显示图像
img.show()

图像的属性

size:查看图像的大小

print(img.size)

format:查看图片的格式

print(img.format)

info : 查看图片相关信息

print(img.info)

mode:图片的模式

print(img.mode)

图片格式转换

Pillow库支持多种图片格式,可以直接使用open()方法读取图片。

图片格式的转换有两种方法

save()

from PIL import Imageim=Image.open('./hh.png')##这里可以使用save()方法将图片保存为其他格式的图片类型im.save('./hhh.bmp')

convert()方法转换图片的格式

#这时会返回一个新的Image对象
image=im.convert('RGB')

图片的缩放操作

在图像处理过程中,经常遇到需要将图片放大或缩小的操作。Image类提供了resize()方法可以实现任意缩小和放大图像

resize()函数的语法格式如下

resize(size, resample=image.BICUBIC, box=None, reducing_gap=None)
  • size:元组参数 (width,height),图片缩放后的尺寸;
  • resample:可选参数,指图像重采样滤波器,默认为 Image.BICUBIC;
  • box:对指定图片区域进行缩放,box 的参数值是长度为 4 的像素坐标元组,即 (左,上,右,下)。注意,被指定的区域必须在原图的范围内,如果超出范围就会报错。当不传该参数时,默认对整个原图进行缩放;
  • reducing_gap:可选参数,浮点参数值,用于优化图片的缩放效果,常用参数值有 3.0 和 5.0。

批量修改图片的尺寸

import os
from PIL import Image
#读取该目录下所有图像的名字
fileName = os.listdir('./image/T91_HR')
print(fileName)
#设定尺寸
width = 350
height = 350
# 如果目录不存在,则创建目录
if not os.path.exists(r'./hh'):os.mkdir(r'./hh')
# 循环读取每一张图片
for img in fileName:##注意这里的路径必须是绝对路径,否则容易报错old_pic = Image.open('./image/T91_HR/'+img)##这里返回一个新的Image对象new_image = old_pic.resize((width, height),Image.BILINEAR)print (new_image)new_image.save('./hh/'+img)

图像分离与合并

split()方法分离颜色通道

from PIL import Image
im=Image.open(r"./t53.png")
#修改图像大小,以适应图像处理
image=im.resize((450,400))#分离颜色通道,产生三个 Image对象
r,g,b = image.split()
r.show()
g.show()
b.show()

merge() 通道合并

merge() 方法的语法格式如下:

Image.merge(mode, bands)

参数说明如下:

  • mode:指定输出图片的模式
  • bands:参数类型为元组或者列表序列,其元素值是组成图像的颜色通道,比如 RGB 分别代表三种颜色通道,可以表示为 (r,g,b)。

注意,该函数会返回一个新的 Image 对象。

from PIL import Imageim=Image.open("./t53.png")
#修改图像大小,以适应图像处理
image=im.resize((450,400))
#分离颜色通道,产生三个 Image对象
r,g,b = image.split()
#重新组合颜色通道,返回先的Image对象
image_merge=Image.merge('RGB',(b,g,r))
image_merge.show()

图像处理

图片裁剪操作

Image 类提供的 crop() 函数可以使用矩形区域的方式对原图像进行裁剪,函数的语法格式如下:

crop(box=None)

box:表示裁剪区域,默认为 None,表示拷贝原图像。

im = Image.open(r"./t53.png")
box =(0,0,20,10)
im_crop = im.crop(box)
im_crop.show()

图像拷贝与粘贴

拷贝、粘贴操作几乎是成对出现的,Image 类提供了 copy() 和 paste() 方法来实现图像的复制和粘贴。其中复制操作(即 copy() 方法)比较简单,下面主要介绍 paste() 粘贴方法,语法格式如下所示:

paste(image, box=None, mask=None)

该函数的作用是将一张图片粘贴至另一张图片中。注意,粘贴后的图片模式将自动保持一致,不需要进行额外的转换。参数说明如下:

  • image:指被粘贴的图片;
  • box:指定图片被粘贴的位置或者区域,其参数值是长度为 2 或者 4 的元组序列,长度为 2 时,表示具体的某一点 (x,y);长度为 4 则表示图片粘贴的区域,此时区域的大小必须要和被粘贴的图像大小保持一致。
  • mask:可选参数,为图片添加蒙版效果。
im = Image.open("./t53.png")
#复制一张图片副本
im_copy=im.copy()
#对副本进行裁剪
im_crop = im_copy.crop((0,0,200,100))
#创建一个新的图像作为蒙版,L模式,单颜色值
image_new = Image.new('L', (200, 100), 200)
image_new.show()
#将裁剪后的副本粘贴至副本图像上,并添加蒙版
im_copy.paste(im_crop,(100,100,300,200),mask=image_new)
#显示粘贴后的图像
im_copy.show()

图像几何变换

图像的几何变换主要包括图像翻转、图像旋转和图像变换操作,Image 类提供了处理这些操作的函数 transpose()、rotate() 和 transform()。

transpose() 翻转操作

该函数可以实现图像的垂直、水平翻转,语法格式如下:

Image.transpose(method)

method 参数决定了图片要如何翻转,参数值如下:

  • Image.FLIP_LEFT_RIGHT:左右水平翻转;
  • Image.FLIP_TOP_BOTTOM:上下垂直翻转;
  • Image.ROTATE_90:图像旋转 90 度;
  • Image.ROTATE_180:图像旋转 180 度;
  • Image.ROTATE_270:图像旋转 270 度;
  • Image.TRANSPOSE:图像转置;
  • Image.TRANSVERSE:图像横向翻转。
im = Image.open("./hh.png")
#返回一个新的Image对象
im_out=im.transpose(Image.FLIP_LEFT_RIGHT)  ###水平翻转
im_out.show()

rotate() 任意角度旋转

Image.rotate(angle, resample=PIL.Image.NEAREST, expand=None, center=None, translate=None, fillcolor=None)

参数说明如下:

  • angle:表示任意旋转的角度;
  • resample:重采样滤波器,默认为 PIL.Image.NEAREST 最近邻插值方法;
  • expand:可选参数,表示是否对图像进行扩展,如果参数值为 True 则扩大输出图像,如果为 False 或者省略,则表示按原图像大小输出;
  • center:可选参数,指定旋转中心,参数值是长度为 2 的元组,默认以图像中心进行旋转;
  • translate:参数值为二元组,表示对旋转后的图像进行平移,以左上角为原点;
  • fillcolor:可选参数,填充颜色,图像旋转后,对图像之外的区域进行填充。
im = Image.open("./hh.png")
#translate的参数值可以为负数,并将旋转图之外的区域填充为绿色
#返回同一个新的Image对象
im_out=im.rotate(45,translate=(0,-25),fillcolor="green")
im_out.show()

transform()图像变换

Image.transform(size, method, data=None, resample=0)

参数说明:

  • size:指定新图片的大小;
  • method:指定图片的变化方式,比如 Image.EXTENT 表示矩形变换;
  • data:该参数用来给变换方式提供所需数据;
  • resample:图像重采样滤波器,默认参数值为 PIL.Image.NEAREST。
from PIL import Image
im = Image.open("./hh.png")
#设置图像大小250*250,并根据data的数据截取原图像的区域,生成新的图像
im_out=im.transform((250,250),Image.EXTENT,data=[0,0,30 + im.width//4,im.height//3])
im_out.show()

图像降噪处理

Pillow 通过 ImageFilter 类达到图像降噪的目的,该类中集成了不同种类的滤波器,通过调用它们从而实现图像的平滑、锐化、边界增强等图像降噪操作。

# 导入Image类和ImageFilter类
from PIL import Image,ImageFilter
im = Image.open("./hh.jpg")
#图像模糊处理
im_blur=im.filter(ImageFilter.BLUR)
##生成轮廓图
im2=im.filter(ImageFilter.CONTOUR)
im2.show()
#边缘检测
im3=im.filter(ImageFilter.FIND_EDGES)
im3.show()
#浮雕图
im4=im.filter(ImageFilter.EMBOSS)
im4.show()
#平滑图smooth
im5=im.filter(ImageFilter.SMOOTH)
im5.show()

图像和数组

将PIL.Image对象和ndarray对象相互转化。

Image.fromarray(array) 将数组转化为Image对象

img = Image.fromarray(array)

Image对象转化为ndarray数组

from PIL import Image
import numpy as np##image对象
img = Image.open("./hh.png")
img.show()
#Image图像转换为ndarray数组
img_2 = np.array(img)
print(img_2)
#ndarray转换为Image图像
arr_img = Image.fromarray(img_2)
#显示图片
arr_img.show()

python中pil教程相关推荐

  1. 使用python中PIL库进行切图时候出现了图片全黑

    使用PIL的Image切图时候图片全黑 不知道大家有没有遇见这样得问题,使用python中PIL库进行切图时候出现了图片全黑得现象 今天写了个切图得代码,但是得到得图片是全黑的,像这样的情况: 不知道 ...

  2. python中PIL的安装参考教程

    相信不少同学想使用python处理一些RGB的图片,但是对于python又不熟悉,处于白菜阶段,没错就是和我一样,今天刚好有这样一个任务需要读取RGB图像的像素值,其实就是灰度值.之前采用matlab ...

  3. python中PIL.Image和OpenCV图像格式相互转换

    PIL.Image转换成OpenCV格式: [python] view plaincopy print? import cv2 from PIL import Image import numpy i ...

  4. python中PIL安装教程

    很多同学会遇到我这样的问题,当解决一些图片问题(本人在解决ctf隐写术的题型时由于需要跑python脚本),在安装pil时出现了这样的错误,这也就加大了我们安装模块的手动工作力度,在开始安装PIL时, ...

  5. python中PIL模块

    Image模块 Image模块是在Python PIL图像处理中常见的模块,对图像进行基础操作的功能基本都包含于此模块内.如open.save.conver.show-等功能. open类 Image ...

  6. python中pytest教程_Pytest安装新手详细教程

    相信软件测试的从业者对Pytest都不会感到陌生,它是一个功能丰富的Python测试框架,因其简单灵活,支持复杂的功能测试和丰富的第三方插件而备受大家喜爱.下面我将手把手教大家如何安装Pytest,一 ...

  7. Python中怎么读写图像

    Python中,主要使用的图像处理库是PIL(Python Imaging Library).opencv.scikit-image 1. 用PIL读写图片1 from PIL import Imag ...

  8. Python 图像处理 PIL 第三方库详细使用教程(更新中)

    Pillow 库 基本概述 Python Pillow PIL 库的用法介绍,Pillow库是一个Python的第三方库. 要点:PIL库是一个具有强大图像处理能力的第三方库,不仅包含了丰富的像素.色 ...

  9. python中怎样在图片上画线段_python 实现PIL模块在图片画线写字

    图片上画线条 import sys from PIL import Image,ImageDraw im = Image.open("th.png") draw = ImageDr ...

最新文章

  1. [React] Web应用:Hello World
  2. vue 巧用过渡效果
  3. 剑桥少儿英语预备级教案(上) unit15 I can draw it.
  4. Globus toolkit3.0
  5. python 使用 requests 做 http 请求
  6. iOS - Swift NSData 数据
  7. 20145206邹京儒《网络对抗》逆向及Bof基础实践
  8. Linux新手必须掌握的命令(2)
  9. MVC去掉传参时的验证:从客户端中检测到有潜在危险的Request.QueryString值
  10. 计算机网络毕业论文格式模板范文,计算机毕业论文格式模板范文(计算机毕业论文选题)...
  11. AHP中特征向量、权重值、CI值等指标如何计算?
  12. HDFS文件误删除之恢复
  13. 每天学命令deleteRow
  14. ipad未能与itunes连接到服务器,ipad无法连接itunes store怎么办
  15. 亦大亦小如你--MySQL
  16. 手把手教你VMware虚拟机详细安装Debian 11 图文教程
  17. 被迫解除劳动关系通知书
  18. 几款常用装机检测软件
  19. numpy中axis理解
  20. 自从加入酒水捡漏群,京东自营酒水2折捡漏,我一下子屯了6个酒柜...

热门文章

  1. matcher java_Java Matcher类详解
  2. 高速公路智能化维护,多点布局智慧交通“车路协同”
  3. 电竞数据:python之fundata的初步使用
  4. IHE 测试 XDS.b XDS.I 基于openxds实现
  5. unity制作手雷抛物线
  6. Codeforces896A Nephren gives a riddle
  7. 汽车违章查询免费API
  8. 实现strcmp函数
  9. (十一)Server-side request forgery (SSRF)
  10. 熊孩子要用计算器做数学?立马安排了一款Python白嫖版学生计算器!