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

Bertha 。 2022-01-21 02:47 671阅读 0赞

实验环境:windows10,pyCharm

PIL库中的Image模块提供了一个同名的类,用来表示PIL图像。该模块还提供了许多工厂功能,包括从文件加载图像和创建新图像的功能

本文参考PIL官方文档

安装PIL:

  1. pip install Pillow

1、简单例子

从文件中打开并显示一张图片

  1. from PIL import Image #导入PIL库中的Image模块
  2. im = Image.open("images/mm.jpg") #打开一张图片
  3. im.show() #显示图片

运行后显示如下图片:

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3p6cWFhYXNzcw_size_16_color_FFFFFF_t_70

2、获取图片属性

format属性:

这个属性标识了图像来源,如果图像不是从文件读取它的值就是None。

  1. from PIL import Image #导入PIL库中的Image模块
  2. im = Image.open("images/mm.png") #打开一张图片
  3. print(im.format) #打印图像格式

运行输出如下:

20190608163330345.PNG

输出的格式信息与图像的扩展名无关而是图片本身的格式

size属性:

图像的大小,按照像素数计算,它的返回值为宽度和高度的二元组(width,height)

  1. from PIL import Image #导入PIL库中的Image模块
  2. im = Image.open("images/mm.png") #打开一张图片
  3. print(im.size) #打印图像大小

运行输出如下:

20190608164549819.PNG

mode属性:

图像的模式。这是一个字符串,指定图像使用的像素格式。典型值是“1”、“L”、“RGB”或“CMYK”。有关完整列表,请参见下表:












































模式 描述
1 1位像素,黑色和白色,每个字节存储一个像素
L 8位像素,灰度图
P 8位像素,使用调色板映射到任何其他模式
RGB 3x8位像素,三个通道的颜色
RGBA 4x8位像素,三个通道的颜色与透明通道
CMYK 4×8位像素,颜色隔离
YCbCr 3x8-bit pixels, colour video format
I 32位带符号整数像素
F 32位浮点像素
  1. from PIL import Image #导入PIL库中的Image模块
  2. im1 = Image.open("images/mm.png") #打开一张png图片
  3. im2 = Image.open("images/mm2.jpg") #打开一张jpg图片
  4. print(im1.mode) #打印图像模式
  5. print(im2.mode) #打印图像模式

运行输出如下:

20190608170826893.PNG

可以看出png对应的是RGBA ,jpg对应的是RGB

palette属性:

调色板表,如果图像的mode是“P”,那么这应该是ImagePalette类的一个实例。否则,应该将为None。

  1. from PIL import Image #导入PIL库中的Image模块
  2. im = Image.open("images/mm.png") #打开一张图片
  3. print(im.mode) #打印图像模式
  4. print(im.palette) #打印图像palette属性

输出如下:

20190608173557297.PNG

info属性:

存储图像相关数据的字典。文件句柄使用该字典传递从文件中读取的各种非图像信息。大多数方法在返回新的图像时都会忽略这个字典;因为字典中的键并非标准化的,对于一个方法,它不能知道自己的操作如何影响这个字典。如果用户需要这些信息,需要在方法open()返回时保存这个字典。

  1. from PIL import Image #导入PIL库中的Image模块
  2. im = Image.open("images/mm.png") #打开一张图片
  3. print(im.info) #打印图像信息

输出如下格式的信息 :

  1. {'XML:com.adobe.xmp': '<?xpacket begin="\ufeff" id="W5M0MpCehiHzreSzNTczkc9d"?>\n<x:xmpmeta xmlns:x="adobe:ns:meta/" x:xmptk="Adobe XMP Core 5.6-c142 79.160924, 2017/07/13-01:06:39 ">\n <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">\n <rdf:Description rdf:about=""/>\n </rdf:RDF>\n</x:xmpmeta>\n<?xpacket end="r"?>'}

3、更改图像属性

重置图像大小:

  1. im.resize(size) image

返回图像的调整大小的副本。size参数以像素为单位作为的一个2元组:(宽度、高度)。

如下将图像重置大小为128*128

  1. from PIL import Image #导入PIL库中的Image模块
  2. im = Image.open("images/mm.png") #打开一张图片
  3. print(im.size) #打印原图大小
  4. new_im = im.resize((128,128)) #重置图像大小
  5. print(new_im.size) #打印重置大小后的图像
  6. new_im.show() #显示重置大小后的图像

运行输出如下:

20190609144927926.PNG20190609145015153.PNG

转换图像模式

  1. im.convert(mode)⇒ image

将当前图像转换为其他模式,并且返回新的图像。

下面将一张图片转换成灰度图:

  1. from PIL import Image #导入PIL库中的Image模块
  2. im = Image.open("images/mm.png") #打开一张图片
  3. print(im.mode) #打印原图像的模式
  4. im.show() #显示原图
  5. new_im = im.convert("L") #将图片模式转换为灰度图模式并返回一个新对象
  6. print(new_im.mode) #打印转换后的图像的模式
  7. new_im.show() #显示转换后的图

20190609141032979.PNG

原图和转换图对比如下:

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3p6cWFhYXNzcw_size_16_color_FFFFFF_t_70 1watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3p6cWFhYXNzcw_size_16_color_FFFFFF_t_70 2

关于更多的图像模式转换可以参考官网convert的使用

4、保存图像

  1. im.save(outfile, options…)
  2. im.save(outfile, format, options…)

将图像保存在给定文件名下。如果省略格式,则尽可能从文件名扩展名确定格式。此方法不返回任何值。

如下打打开一张图片重置大小和改变模式后保存到本地:

  1. from PIL import Image #导入PIL库中的Image模块
  2. im = Image.open("images/mm.png") #打开一张图片
  3. #重置图像大小并改变图像的模式成灰度图
  4. new_im = im.resize((128,128)).convert('L')
  5. #保存图像到本地
  6. new_im.save("images/new_im.png")

打开本地查看图像:

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3p6cWFhYXNzcw_size_16_color_FFFFFF_t_70 3

本篇结束!

下篇:python图像处理 (一).PIL图像处理库学习②

发表评论

表情:
评论列表 (有 0 条评论,671人围观)

还没有评论,来说两句吧...

相关阅读