学习总结自:PIL官方文档

PIL(Python Image Library)是Python的一个图像处理库。

1、简介

PIL库中最重要的类是Image

①从文件中加载Image——open方法

from PIL import Image
im=Image.open('文件路径')

成功后,该函数返回Image对象。

你可以通过一系列Image属性检查该文件的内容:

print(im.format,im.size,im.mode)

如果文件没打开,则会抛出OSError异常。

所以,安全的文件打开方式为:

try:
with Image.open('Test.jpg') as im:
im.show()
except OSError:
pass

②显示Image对象

当我们有了一个Image对象,就可以对其进行一系列的操作和处理,例如,我们通过show方法打开

im.show()

2、一些常用操作

1)读写图像

①从图像文件读取

见第一部分。

PIL支持很多Image文件格式。如果想读取Image文件,就用Image.open()方法。我们不需要关注图像类型,只需要调用该方法就可以,它会自动识别图像文件格式。

如果想将Image对象保存为图像文件,就用Image.save()方法。保存文件时,路径名就变得很重要了。除非已经指定格式(通过第二个参数指定),否则该库会用路径中的扩展名作为存储格式。

②从之前打开的文件中读取

也可以从一个类文件(file-like)对象中打开一幅图像,该对象必须实现了file.read、file.seek、file.tell方法,并以二进制的模式打开了:

from PIL import Image
with open('Test.jpg','rb') as fp:#此时的fp就是file-like对象
im=Image.open(fp)

③从二进制数据中读取

from PIL import Image
import io
im=Image.open(io.BytesIO(buffer))

2)将一个图片文件转化为JPEG格式

读取任意类型的图像文件,并将之保存为JPEG类型

import os,sys
from PIL import Image for infile in sys.argv[1:]:
f,e=os.path.splitext(infile)
outfile=f+'.jpg'
if infile != outfile:
try:
with Image.open(infile) as im:
im.save(outfile)
except OSError:
print('cannot convert',infile)

3)创建JPEG缩略图

import os,sys
from PIL import Image size=(128,128)
for infile in sys.argv[1:]:
outfile=os.path.splitext(infile)[0]+'.thumbnail'
if infile!=outfile:
try:
with Image.open(infile) as im:
im.thumbnail(size)
im.save(outfile,'JPEG')
except OSError:
print('cannot create thumbnail for',infile)

4)识别某文件夹中图片文件,打印它们的信息

import sys
from PIL import Image for infile in sys.argv[1:]:
try:
with Image.open(infile) as im:
print(infile,im.format,f'{im.size}x{im.mode}')
except OSError:
pass

5)裁剪、粘贴、融合

①从Image中裁剪一小块区域:crop

box=(100,100,400,400)
region=im.crop(box)#提取box所在矩形区域的图像

②处理该小块图像,并粘贴回原图:paste

将该小块图像翻转180°,并粘贴回去

region=region.transpose(Image.ROTATE_180)
im.paste(region,box)

粘贴时,region必须和box的尺寸一致。

6)波段分割与融合:split、merge

r,g,b=im.split()
im=Image.merge('RGB',(b,g,r))

7)几何变换:resize、rotate、transpose

resize:尺寸变形

rotate:顺时针旋转,参数是角度;旋转整幅图像,但是保留原始框架

transpose:旋转,可以将整个框架给旋转了

x,y=im.size
#长宽缩小两倍
new_size=(x/2,y/2)
new_im=im.resize(new_size) #旋转
new_im=im.rotate(45)
new_im=im.transpose(Image.ROTATE_90)

8)颜色变换:convert

Python允许用convert()方法将Image实现色彩模式转化,'L'模式是灰度图像

im=im.convert('L')

9)图像增强

①滤波:Filter

使用模块ImageFilter中的Filter()方法和一些预定义的增强滤波器

im=im.filter(ImageFilter.DETAIIL)

②像素操作:point

point()可以实现对每个像素点的像素值实行修改;

该方法接收一个函数,对每个像素值都用该方法进行处理;

比如下文代码,就是将每个像素值提高为原来的1.2倍:

im=im.point(lambda i: i *1.2)

如果我们同时采用point()与paste()方法,就能实现对图像的选择性修改。

③波段处理:split+point+merge

im_R,im_G,im_B=im.split()
#筛选出R<100的区域,作为蒙版
mask=im_R.point(lambda i:i<100 and 255)
#处理G波段的所有像素值
out=im_G.point(lambda i:i*0.7) #把处理好的G波段用之前的mask进行蒙版处理
#相当于保留r<100部分的G,除去r>100部分的G
im_G.paste(out,None,mask) #波段重建
im=Image.merge(im.mode,(im_R,im_G,im_B))

④一段用于创建mask的语句

imout=im.point(lambda i: expression and 255)
#制作一个符合expression的mask

ImageEnhance模块中有很多图像增强类与方法

⑤对比度:ImageEnhance.Contrast

from PIL import ImageEnhance

enh=ImageEnhance.Contrast(im)
enh.enhance(1.3).show('30% more contrast')

⑥动画

当我们打开一个动画图片(典型的如GIF)后,PIL自动加载第一帧,我们可以用seek和tell方法在不同帧间移动:

from PIL import Image
with Image.open('Test.gif') as im:
im.seek(1)#跳到第一帧 #对第一帧的修改
#....
try:
while(1):
im.seek(im.tell()+1)
#对每一帧的修改
except EOFError:
pass #结束时

当动画访问到最后一帧之后,再用seek,就会抛出EOFError

逐帧处理:ImageSequence.Iterator

from PIL import ImageSequence
for frame in ImageSequence.Iterator(im):
#逐帧处理语句

Python:PIL(一)——简介的更多相关文章

  1. Python生态环境简介[转]

    Python生态环境简介 作者: Mir Nazim 原文: Python Ecosystem - An Introduction 译者: dccrazyboy  原译: Python生态环境简介 当 ...

  2. Python PIL

    Python PIL PIL (Python Image Library) 库是Python 语言的一个第三方库,PIL库支持图像存储.显示和处理,能够处理几乎所有格式的图片. 一.PIL库简介 1. ...

  3. (转)python生态环境简介

    Python生态环境简介 作者: Mir Nazim 原文: Python Ecosystem - An Introduction 译者: dccrazyboy  原译: Python生态环境简介 当 ...

  4. Python PIL 库的应用

    PIL (Python Image Library) 库是Python 语言的一个第三方库,PIL库支持图像存储.显示和处理,能够处理几乎所有格式的图片. 一.PIL库简介 1. PIL库主要有2个方 ...

  5. 基于Python PIL实现简单图片格式转化器

    基于Python PIL实现简单图片格式转化器 目录 基于Python PIL实现简单图片格式转化器 1.简介 2.前期资料准备 2.1.1如何实现图片格式转换? 2.1.2如何保存需要大小的图片? ...

  6. Python,PIL压缩裁剪图片

    自己写了用来压缩 DC 照片的,批量处理整目录文件,非常方便.需要安装 PIL #!/usr/bin/env python import Image import os import os.path ...

  7. python PIL 图像处理操作

    python PIL 图像处理 # 导入Image库 import Image # 读取图片 im = Image.open("1234.jpg") # 显示图片 im.show( ...

  8. Python PIL模块笔记

    利用python pil 实现给图片上添加文字 图片中添加文字#-*- coding: utf-8 -*- from PIL import Image,ImageDraw,ImageFont ttfo ...

  9. Python 3 mysql 简介安装

    Python 3 mysql 简介安装 一.数据库是什么 1.  什么是数据库(DataBase,简称DB) 数据库(database,DB)是指长期存储在计算机内的,有组织,可共享的数据的集合.数据 ...

  10. python PIL 图像处理

    python PIL 图像处理 This blog is from: https://www.jianshu.com/p/e8d058767dfa Image读出来的是PIL的类型,而skimage. ...

随机推荐

  1. python语法缩进

    1.python会根据缩进来判断代码行和前一句代码行之间的关系 2.for循环后一定要缩进,for循环后面的冒号代表告诉python,下面是代码行缩进的第一行

  2. Vue.js之计算属性(computed)、属性监听(watch)与方法选项(methods)

    vue.js官网:https://cn.vuejs.org/v2/guide/components-registration.html 一.计算属性-computed 1. 作用:能够避免数据冗余,通 ...

  3. contos 6.9 和 centos7 配置docker?

    一.contos 6.9 配置docker? 1.检查centos的内核,因为目前docker的版本所支持的centos最低内核版本为2.4 // uname -r // 2.6.32-696.el6 ...

  4. ApacheCN C/C++ 译文集 20211201 更新

    笨办法学C 中文版 前言 导言:C的笛卡尔之梦 练习0:准备 练习1:启用编译器 练习2:用Make来代替Python 练习3:格式化输出 练习4:Valgrind 介绍 练习5:一个C程序的结构 练 ...

  5. 使用 TensorFlow 构建机器学习项目中文版&#183;翻译完成

    原文:Building Machine Learning Projects with TensorFlow 协议:CC BY-NC-SA 4.0 不要担心自己的形象,只关心如何实现目标.--<原 ...

  6. 【第十三期】B站后端开发实习生一、二面经

    写在最前:非科班渣硕去年转码一年,不是什么大佬,纯小白(go语言开发). 一面(大概70min) 首先是自我介绍.(比较传统,就是描述下自己的技术栈) 线程和进程的关系. 线程之间如何进行通信. 死锁 ...

  7. 将string字符串中的换行符进行替换

    /** * 方法名称:replaceBlank * 方法描述: 将string字符串中的换行符进行替换为"" * */ public static String replaceBl ...

  8. Spring学习二:Spring Bean 定义

    Bean 定义 被称作 bean 的对象是构成应用程序的支柱也是由 Spring IoC 容器管理的.bean 是一个被实例化,组装,并通过 Spring IoC 容器所管理的对象.这些 bean 是 ...

  9. JavaScript与java语法区别

    网页中各种技术的作用 感谢大佬:https://blog.csdn.net/RookiexiaoMu_a/article/details/89052768 HTML 制作网页的结构 CSS 美化网页 ...

  10. visual studio版本 宏

    转载请注明来源:https://www.cnblogs.com/hookjc/ MSVC++ 12.0 _MSC_VER == 1800 (Visual Studio 2013) MSVC++ 11. ...