PIL-图像处理
来源:互联网 发布:架子鼓软件下载 编辑:程序博客网 时间:2024/06/17 19:39
参考:
1、https://python-pillow.org/
2、https://github.com/python-pillow/Pillow
3、http://pillow.readthedocs.io/en/4.3.x/
- 1使用Image类
- 加载图像
- 2读写图像
- 将文件转换为JPEG
- 创建JPEG缩略图
- 识别图像文件
- 3剪切粘贴合并图像
- 从图像复制子矩形
- 处理一个子矩形并将其粘贴回来
- 滚动图像
- 波段拆分和合并
- 4几何变换
- 简单的几何变换
- Transposing an image
- 5颜色变换
- 转换模式
- 6图像增强
- 滤波
- 使用滤波器
- 点操作
- 应用点变换
- 单个波段处理
- 增强
- 图像增强
- 图像序列
- 读取序列
- 使用ImageSequence迭代器类
- 滤波
- 7Postscript printing
- 绘画后记
- 8More on reading images
- Reading from an open file
- Reading from a string
- 从tar存档读取
- 9控制解码器
- Reading in draft mode
1、使用Image类
加载图像
#!/usr/bin/env python3# -*- coding: UTF-8 -*-from __future__ import print_functionfrom PIL import Imageim=Image.open('Lenna.png') # 打开图像print(type(im)) # <class 'PIL.PngImagePlugin.PngImageFile'>print(im.format, im.size, im.mode) # PNG (512, 512) Pim.show()
2、读写图像
将文件转换为JPEG
from __future__ import print_functionimport os, sysfrom PIL import Imagefor infile in sys.argv[1:]: f, e = os.path.splitext(infile) outfile = f + ".jpg" # ".tif" 保存成tif格式 if infile != outfile: try: Image.open(infile).save(outfile) except IOError: print("cannot convert", infile)
创建JPEG缩略图
from __future__ import print_functionimport os, sysfrom PIL import Imagesize = (128, 128)for infile in sys.argv[1:]: outfile = os.path.splitext(infile)[0] + ".thumbnail" if infile != outfile: try: im = Image.open(infile) im.thumbnail(size) im.save(outfile, "JPEG") except IOError: print("cannot create thumbnail for", infile)
识别图像文件
from __future__ import print_functionimport sysfrom PIL import Imagefor infile in sys.argv[1:]: try: with Image.open(infile) as im: print(infile, im.format, "%dx%d" % im.size, im.mode) except IOError: pass
3、剪切、粘贴、合并图像
从图像复制子矩形
box = (100, 100, 400, 400)region = im.crop(box)
处理一个子矩形,并将其粘贴回来
region = region.transpose(Image.ROTATE_180) # 旋转180度im.paste(region, box)
完整代码:
#!/usr/bin/env python3# -*- coding: UTF-8 -*-from __future__ import print_functionimport os, sysfrom PIL import Imageim=Image.open('Lenna.png')box = (100, 100, 400, 400)region = im.crop(box)region = region.transpose(Image.ROTATE_180) # 旋转180度im.paste(region, box)im.show()
滚动图像
def roll(image, delta): "Roll an image sideways" xsize, ysize = image.size delta = delta % xsize if delta == 0: return image part1 = image.crop((0, 0, delta, ysize)) part2 = image.crop((delta, 0, xsize, ysize)) part1.load() part2.load() image.paste(part2, (0, 0, xsize-delta, ysize)) image.paste(part1, (xsize-delta, 0, xsize, ysize)) return image
波段拆分和合并
r, g, b = im.split() # 灰度图像返回是其本身im = Image.merge("RGB", (b, g, r))
4、几何变换
简单的几何变换
out = im.resize((128, 128)) # 调整大小out = im.rotate(45) # degrees counter-clockwise # 逆时针旋转
Transposing an image
out = im.transpose(Image.FLIP_LEFT_RIGHT) # 左右翻转out = im.transpose(Image.FLIP_TOP_BOTTOM) # 上下翻转out = im.transpose(Image.ROTATE_90) # 逆时针旋转90度out = im.transpose(Image.ROTATE_180)# 逆时针旋转180度out = im.transpose(Image.ROTATE_270)# 逆时针旋转270度
5、颜色变换
转换模式
from PIL import Imageim = Image.open("hopper.ppm").convert("L") # 转成灰度图
6、图像增强
、滤波
使用滤波器
from PIL import ImageFilterout = im.filter(ImageFilter.DETAIL)
点操作
应用点变换
# multiply each pixel by 1.2out = im.point(lambda i: i * 1.2)
单个波段处理
# split the image into individual bandssource = im.split()R, G, B = 0, 1, 2# select regions where red is less than 100mask = source[R].point(lambda i: i < 100 and 255)# process the green bandout = source[G].point(lambda i: i * 0.7)# paste the processed band back, but only where red was < 100source[G].paste(out, None, mask)# build a new multiband imageim = Image.merge(im.mode, source)
增强
图像增强
from PIL import ImageEnhanceenh = ImageEnhance.Contrast(im)enh.enhance(1.3).show("30% more contrast")
图像序列
读取序列
from PIL import Imageim = Image.open("animation.gif")im.seek(1) # skip to the second frametry: while 1: im.seek(im.tell()+1) # do something to imexcept EOFError: pass # end of sequence
使用ImageSequence迭代器类
from PIL import ImageSequencefor frame in ImageSequence.Iterator(im): # ...do something to frame...
7、Postscript printing
绘画后记
from PIL import Imagefrom PIL import PSDrawim = Image.open("hopper.ppm")title = "hopper"box = (1*72, 2*72, 7*72, 10*72) # in pointsps = PSDraw.PSDraw() # default is sys.stdoutps.begin_document(title)# draw the image (75 dpi)ps.image(box, im, 75)ps.rectangle(box)# draw titleps.setfont("HelveticaNarrow-Bold", 36)ps.text((3*72, 4*72), title)ps.end_document()
8、More on reading images
from PIL import Imageim = Image.open("hopper.ppm")
Reading from an open file
from PIL import Imagewith open("hopper.ppm", "rb") as fp: im = Image.open(fp)
Reading from a string
import StringIOim = Image.open(StringIO.StringIO(buffer))
从tar存档读取
from PIL import Image, TarIOfp = TarIO.TarIO("Tests/images/hopper.tar", "hopper.jpg")im = Image.open(fp)
9、控制解码器
Reading in draft mode
from PIL import Imagefrom PIL import PSDrawim = Image.open("home.jpg")print("original =", im.mode, im.size)# original = RGB (512, 384)im.draft("L", (100, 100))print("draft =", im.mode, im.size)# draft = L (256, 192)im.show()
阅读全文
0 0
- pillow pil 图像处理
- PIL处理图像
- PIL图像处理
- PIL-图像处理
- PIL---使用Python处理图像
- PIL 的图像处理模块
- PIL处理图像(一)
- Python图像处理库 PIL
- Python图像处理PIL模块
- PIL python图像处理库
- Python图像处理之PIL模块
- python使用PIL库做图像处理
- Python图像处理PIL库简介
- python 进行图像处理(PIL)
- ubuntu安装图像处理库PIL
- Python图像处理库PIL -- 学习资源
- Python 图像处理库(PIL)--Image学习
- 1-python图像处理之PIL,pylab
- 云栖大会之前 阿里云解释企业云安全架构逻辑
- 英特尔推出全新自主学习芯片加速人工智能发展
- iPhone X会让苹果再次“复兴”么?
- Qt简介
- 诠析亚马逊6大新品:阵线腾挪、场景进攻和建造中枢
- PIL-图像处理
- Override和Overload的含义去区别
- 多态与虚函数 编程题#3(Coursera 程序设计与算法 专项课程3 C++程序设计 郭炜、刘家瑛;OpenJudge)
- test
- 【makefile】简单模板
- Seglink代码之二 数据增强 distorted_bounding_box_crop
- 阿里华先胜对话依图CEO朱珑:创业公司没钱、没数据、没资源,拿什么跟BAT比?
- GMIC北京2017大会今日开幕 以“天·工·开·悟”探索科学复兴
- 龙芯推出新一代处理器,离 Intel 还有多大差距?