一. Pillow简介

       Pillow作为python的第三方图像处理库,提供了广泛的文件格式支持,强大的图像处理能力,主要包括图像储存、图像显示、格式转换以及基本的图像处理操作等。

PIL(Python Image Library)是python的第三方图像处理库,因其强大的功能与众多的使用人数,但由于PIL仅支持到Python 2.7,于是一群志愿者在PIL的基础上创建了兼容的版本,名字叫Pillow,支持最新Python 3.x,又加入了许多新特性,因此,我们可以直接安装使用Pillow。

需要在命令行下通过pip安装:

pip install Pillow

二. Pillow的基本操作

Pillow中最重要的类是Image,可以通过这个类读取和处理图像,还可以创建图像。

1.使用Image模块中的open函数打开一张图片

from PIL import Image
# 打开一个jpg图像文件,注意是当前路径:
im = Image.open('cat.jpg')

如果成功,这个函数返回Image对象。您现在可以使用实例属性来检查文件内容:

  • print(im.format, im.size, im.mode)
    JPEG (1920, 1200) RGB

format 定义图像的格式,属为图像来源。如果不是从文件读取就是None。

size属性是一个元组,表示图像的宽度和高度(单位为像素)。

mode属性表示图像的模式,定义了图像中波段的数量和名称,以及像素类型和深度。常见模式为灰度图像为“L”(亮度),真彩色图像为“RGB”,印刷四色为“CMYK”。

如果文件不能打开,则抛出IOError异常。

当有一个Image对象时,就可以利用它来处理操作图像,例如,加载一张图像

  • im.show()

2.保存指定格式的图像

save(filename,format) :

  • im.save('dog.jpg','png')

上面的代码将图像重新保存成png格式

3.图片转成jpg格式

  • from __future__ import print_function
  • 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:
  • Image.open(infile).save(outfile)
  • except IOError:
  • print("cannot convert", infile)

save函数的第二个参数可以用来指定图片格式,如果文件名中没有给出一个标准的图像格式,那么第二个参数是必须的。

4.剪裁矩形区域 crop(box)

box是一个有四个数字的元组(upper_left_x,upper_left_y,lower_right_x,lower_right_y),分别表示裁剪矩形区域的左上角x,y坐标,右下角的x,y坐标,规定图像的最左上角的坐标为原点(0,0),宽度的方向为x轴,高度的方向为y轴,每一个像素代表一个坐标单位。

crop()返回的仍然是一个Image对象。

  • im = Image.open("cat.jpg","r")
  • box = (300,300,800,800)
  • region = im.crop(box)
  • region.show()
  • im.crop()
上面的代码在im图像上裁剪了一个box矩形区域,然后显示出来。

5.图像粘贴 paste(region,box,mask)

region是要粘贴的Image对象,box是要粘贴的位置,可以是一个两个元素的元组,表示粘贴区域的左上角坐标,也可以是一个四个元素的元组,表示左上角和右下角的坐标。如果是四个元素元组的话,box的size必须要和region的size保持一致,否则将会被convert成和region一样的size。

  • im.paste(region,(100,100),None)
  • im.show()

上面的代码将region图像粘贴到左上角为(100,100)的位置,效果如图所示:

6.生成缩略图 thumbnail(size,resample)

thumbnail可以创建一个指定大小(size)的缩略图,需要注意的是,thumbnail方法是原地操作,返回值是None。第一个参数是指定的缩略图的大小,第二个是采样的,有Image.BICUBIC,PIL.Image.LANCZOS,PIL.Image.BILINEAR,PIL.Image.NEAREST这四种采样方法。默认是Image.BICUBIC。

  • im.thumbnail((200,200),resample=Image.BICUBIC)
  • im.show()

上面的代码形成了一个200×200的缩略图。

7.动态图

Pillow支持一些动态图片的格式如FLI/FLC,GIF和其他一些处于实验阶段的格式。TIFF文件同样可以包含数帧图像。

当读取动态图时,PIL自动读取动态图的第一帧,可以使用seek和tell方法读取不同帧。

  • from PIL import Image
  • im = Image.open("animation.gif")
  • im.seek(1) # skip to the second frame
  • try:
  • while 1:
  • im.seek(im.tell()+1)
  • # do something to im
  • except EOFError:
  • pass # end of sequence

当读取到最后一帧时,Pillow抛出EOFError异常。

或者可以使用下述迭代器类

动态图迭代器类

class ImageSequence:def __init__(self, im):self.im = imdef __getitem__(self, ix):try:if ix:self.im.seek(ix)return self.imexcept EOFError:raise IndexError # end of sequencefor frame in ImageSequence(im):# ...do something to frame...
  • class ImageSequence:
  •     def __init__(self, im):
  •         self.im = im
  •     def __getitem__(self, ix):
  •         try:
  •             if ix:
  •                 self.im.seek(ix)
  •             return self.im
  •         except EOFError:
  •             raise IndexError # end of sequence
  • for frame in ImageSequence(im):
  •     # ...do something to frame...
  •  

8.旋转和翻转 transpose(method)

method是transpose的参数,表示选择什么样的翻转或者旋转方式,可以选择的值有:

- Image.FLIP_LEFT_RIGHT,表示将图像左右翻转

- Image.FLIP_TOP_BOTTOM,表示将图像上下翻转

- Image.ROTATE_90,表示将图像逆时针旋转90°

- Image.ROTATE_180,表示将图像逆时针旋转180°

- Image.ROTATE_270,表示将图像逆时针旋转270°

- Image.TRANSPOSE,表示将图像进行转置(相当于顺时针旋转90°)

- Image.TRANSVERSE,表示将图像进行转置,再水平翻转

  • im_rotate_180 = im.transpose(Image.ROTATE_180)
  • im_rotate_180.show()

上面的代码将im逆时针旋转180°,然后显示出来。

9.分离和合并通道

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

分离 im.split()

合并 Image.merge(mode,channels), 将多个单一通道的序列合并起来,组成一个多通道的图像,mode是合并之后图像的模式,比如"RGB",channels是多个单一通道组成的序列。

对于单通道图片,split()返回图像本身。为了处理单通道图片,必须先将图片转成RGB。

 10.颜色模式转换

convert(mode,matrix,dither,palette,colors)

convert方法可以改变图像的模式(mode),一般是在'RGB'(真彩图)、'L'(灰度图)、'CMYK'(压缩图)之间转换。

  • im_L = im.convert ("L")
  • im_L .show()

上面的代码就是将图像转化为灰度图。

11.图像过滤器 filter(filter)

filter方法可以将一些过滤器操作应用于原始图像,比如模糊,边缘增强、浮雕等。filter是过滤器函数,在PIL.ImageFilter函数中定义了大量内置的filter函数,比如BLUR(普通模糊),GaussianBlur(高斯模糊) FIND_EDGES(查找边)等

  • from PIL import Image
    ImageFilterim = Image.open('cat.jpg')
    # 高斯模糊
    im_gaussianblur = im.filter(ImageFilter.GaussianBlur)
    im_gaussianblur.show()
    # 普通模糊
    im_blur = im.filter(ImageFilter.BLUR)
    im_blur.show()
    # 找到边缘
    im_find_edge = im.filter(ImageFilter.FIND_EDGES)
    im_find_edges.show()
    # 浮雕
    im_emboss = im.filter(ImageFilter.EMBOSS)
    im_emboss.show()
    # 轮廓
    im_contour = im.filter(ImageFilter.CONTOUR)
    im_contour.show()
    # 锐化
    im_sharpen = im.filter(ImageFilter.SHARPEN)
    im_sharpen.show()
    # 平滑
    im_smooth = im.filter(ImageFilter.SMOOTH)
    im_smooth.show()
    # 细节
    im_detail = im.filter(ImageFilter.DETAIL)
    im_detail.show()

12.图像增强ImageEnhance()

图像增强也是图像预处理中的一个基本技术,Pillow中的图像增强函数主要在ImageEnhance模块下,通过该模块可以调节图像的白平衡(Color)、亮度(Brightness)、对比度(Contrast)和锐化(Sharpness)等。

  • from PIL import Image
  • Enhancebrightness = ImageEnhance.Brightness(im)
  • im_brightness = brightness.enhance(1.5)
  • im_brightness.show()
 

上面的代码将原来图像的亮度增加50%。

引自:

https://www.cnblogs.com/apexchu/p/4231041.html

https://mp.weixin.qq.com/s?src=11&timestamp=1585214122&ver=2240&signature=BHuFEUhr8HEwHiNZG-S*iCQUpk84VDicpf7KDhrBQsFZwIowA*WO3FOfAOVY8P2EG7XvnMwumSfKfohjFAfc98fWrUzmb*jf3Xrsoa-W0WEgMV*KZisI5YvhtCPPCjxp&new=1

感谢!

 

图像处理Pillow详解相关推荐

  1. python输入参数改变图形_Python基于Tensor FLow的图像处理操作详解

    本文实例讲述了Python基于Tensor FLow的图像处理操作.分享给大家供大家参考,具体如下: 在对图像进行深度学习时,有时可能图片的数量不足,或者希望网络进行更多的学习,这时可以对现有的图片数 ...

  2. 图像处理函数详解——imadjust

    功能: 调节灰度图像的亮度或彩色图像的颜色矩阵. 用法:        J = imadjust(I,[low_in; high_in],[low_out; high_out],gamma)      ...

  3. 《MATLAB图像处理实例详解》:学习第六天(2022.10.09)

    4.2.3 图像的缩放 MATLAB 图像处理工具箱中提供了函数imresize( )进行图像的缩放操作,其具体的调用格式如下: B=imresize(A, m):该函数返回缩放后的图像B:A为要进行 ...

  4. Opencv图像处理之详解掩膜mask

    1.在OpenCV中我们经常会遇到一个名字:Mask(掩膜).很多函数都使用到它,那么这个Mask到底什么呢? 2.如果我们想要裁剪图像中任意形状的区域时,应该怎么办呢?  答案是,使用掩膜(mask ...

  5. pilt图像处理_详解python opencv、scikit-image和PIL图像处理库比较

    进行深度学习时,对图像进行预处理的过程是非常重要的,使用pytorch或者TensorFlow时需要对图像进行预处理以及展示来观看处理效果,因此对python中的图像处理框架进行图像的读取和基本变换的 ...

  6. 数字图像处理技术详解程序_大学专业详解系列135——数字媒体技术(工学学士)...

    数字媒体技术(工学学士) 毕业生应具备的知识和能力 (1)系统掌握数字媒体技术专业的基本理论.基础知识和基本技能: (2)掌握数字影视技术.数字影视制作技术的理论与方法,能熟练运用拍摄.编辑.特效制作 ...

  7. python图像处理教程_Python基于Tensor FLow的图像处理操作详解

    本文实例讲述了Python基于Tensor FLow的图像处理操作.分享给大家供大家参考,具体如下: 在对图像进行深度学习时,有时可能图片的数量不足,或者希望网络进行更多的学习,这时可以对现有的图片数 ...

  8. 数字图像处理技术详解程序_安装地暖施工程序有哪些 安装地暖技术要求是什么【详解】...

    随着经济的发展,我们的生活水平也有了十分巨大的改善,为了让我们的生活更加舒适,很多人都会选择在家中安装 地暖 ,地暖的优势是非常多的,受到了很多人的肯定,如今,在上海,选择安装地暖的家庭就十分的多,要 ...

  9. 《MATLAB图像处理实例详解》:CH_7(图像分割技术)

    图像分割技术 ①提取线段 close all;clear all;clc; I=imread('E:\Matlab_exercise\图片素材\xianduan.jpg'); I=rgb2gray(I ...

最新文章

  1. 写给那些想升职管理层的同学
  2. python mysql数据库长连接_python 长连接 mysql数据库
  3. 华为鸿蒙ai字幕,EMUI11一个值得吹爆的功能?AI字幕,支持翻译英日韩
  4. 你组织的安全策略阻止未经身份验证的来宾访问_你不能访问此共享文件夹,因为你组织的安全策略阻止未经身份验证来宾访问。...
  5. 运用python的方式_对Python使用mfcc的两种方式详解
  6. ASCII码表 0~127
  7. redis和sqlserver数据同步_redis缓存和mysql数据库同步
  8. 用友U8 ERP系统材料出库单打印格式设置-表格格式调整
  9. c语言习题 编写自定义函数 volume_c,功能是求正方体的体积(要求:正方体的的边长 a 在主函数中做输入,在主函数中调用函数 volume_c,在主函数中输出正方体体积,a 为int 型变量)。
  10. 不同机构的自动驾驶专利分析报告解读
  11. h标签和p标签和hr标签
  12. 浏览器主页劫持的解决办法
  13. 代理模式-Python实现
  14. 毕业论文的奋斗记(一)
  15. Merge用法:Oracle 10g中对Merge语句的增强
  16. Echarts 柱状图渐变色设置
  17. 大数据学习根据应用目标,主要可以划分为哪三个阶段?
  18. JavaScript前台判空
  19. Web应用程序和Web网站
  20. go-micro使用Grpc

热门文章

  1. 作者:周大铭,管理科学与工程博士,工业和信息化部赛迪研究院软件所助理研究员。...
  2. 发现大数据产业创新黑马,CBDS2016大数据双创路演火热召集
  3. 【云服务】云服务案例分析Quiz
  4. 【Java】Socket多客户端Client-Server聊天程序
  5. 贪婪的送礼者(洛谷P1201题题解,Java语言描述)
  6. 是圆的问题呢(洛谷P1652题题解,Java语言描述)
  7. 亚马逊将推出卡车版Uber,或迎来一场货运的改革
  8. 重构随笔——重构的原则
  9. Java对象转出json并过滤指定属性
  10. 自创小插件让emacs支持工程项目