PIL是python中的图像处理类库,为python提供了基本的图像处理和基本操作。而PIL中最重要的就是Image模块,下面给出具体的例子来理解此模块。

读取一幅图像

  • 我们用Image模块中的open()来实现.
    对于PNG,JPG和BMP等不同格式的彩色图像之间的转换都可以通过Image模块来完成,具体地说,在打开这些图像时,PIL会将他们解码为三通道的'RGB'图像,人们可以基于'RGB'图像进行处理。
from PIL import Image
import matplotlib.pyplot as plt
import numpy as np

image=Image.open('D:/test.jpg')#读取图像
plt.imshow(image)
plt.show()#需要调用show()方法,不然图像只会在内存中而不显示出来

转化为灰度图像

  • 我们用convert()方法来实现图像的灰度转化。
    Convert()会根据传入参数的不同将图像变成不同的模式。PIL中有九种不同模式。分别为1,L,P,RGB,RGBA,CMYK,YCbCr,I,F。
    其中,模式‘1’为二值图像,非黑即白。但是它每个像素用8个bit表示,0表示黑,255表示白。
    模式‘L’为灰色图像它的每个像素用8个bit表示,0表示黑,255表示白,其他数字表示不同的灰度。在PIL中,从模式“RGB”转换为“L”模式是按照下面的公式转换的:
    L = R * 299/1000 + G * 587/1000+ B * 114/1000
    模式“P”为8位彩色图像,它的每个像素用8个bit表示,其对应的彩色值是按照调色板查询出来的。

模式“RGBA”为32位彩色图像,它的每个像素用32个bit表示,其中24bit表示红色、绿色和蓝色三个通道,另外8bit表示alpha通道,即透明通道。

模式“CMYK”为32位彩色图像,它的每个像素用32个bit表示。模式“CMYK”就是印刷四分色模式,它是彩色印刷时采用的一种套色模式,利用色料的三原色混色原理,加上黑色油墨,共计四种颜色混合叠加,形成所谓“全彩印刷”。

模式“YCbCr”为24位彩色图像,它的每个像素用24个bit表示。YCbCr其中Y是指亮度分量,Cb指蓝色色度分量,而Cr指红色色度分量。人的肉眼对视频的Y分量更敏感,因此在通过对色度分量进行子采样来减少色度分量后,肉眼将察觉不到的图像质量的变化。

模式“RGB”转换为“YCbCr”的公式如下:
Y= 0.257R+0.504G+0.098B+16
Cb = -0.148
R-0.291G+0.439B+128
Cr = 0.439R-0.368G-0.071*B+128

模式“I”为32位整型灰色图像,它的每个像素用32个bit表示,0表示黑,255表示白,(0,255)之间的数字表示不同的灰度。在PIL中,从模式“RGB”转换为“I”模式是按照下面的公式转换的:
I = R * 299/1000 + G * 587/1000 + B * 114/1000

模式“F”为32位浮点灰色图像,它的每个像素用32个bit表示,0表示黑,255表示白,(0,255)之间的数字表示不同的灰度。在PIL中,从模式“RGB”转换为“F”模式是按照下面的公式转换的:
F = R * 299/1000+ G * 587/1000 + B * 114/1000

  • 我们以灰度图像为例,将目标图像转换成灰度图像,由上可知,我们要给convert()方法传入参数“L”,具体代码如下:
from PIL import Image
import matplotlib.pyplot as plt
import numpy as np
import matplotlib.cm as cm   #cm是colormap的缩写
image_gray=Image.open('D:/test.jpg').convert("L")
data=np.array(image_gray)  #在显示灰度图像时array()方法将图像转换成Numpy的数组对象,图片得以显式,否则会出现错误
plt.imshow(data,cmap=cm.gray)# cmap:代表颜色图谱,默认绘制为RGB(A)颜色空间。
plt.show()

转换图像的格式

  • 通过save()方法,PIL可以将图像保存成多种格式的文件,当传入不同的扩展名时,它会根据扩展名自动转换图像的格式。
from PIL import Image
image=Image.open('D:/test.jpg')#打开jpg图像文件
image.save('D:/train.jpg')#保存图像,并转换成png格式

#读取转换的train.png图像
from PIL import Image
import matplotlib.pyplot as plt
import numpy as np
image=Image.open('D:/train.png')
plt.imshow(image)
plt.show()

创建缩略图

  • thumbnail()方法接受一个一元组参数,分别对应着缩略图的宽高,在缩略时,函数会保持图片的宽高比例,如果输入的参数宽高和原图宽高比不同,则会依据最小对应边进行于按比例缩放。
    比如:一张图片为300*420大小的图片,当参数为(200,200)时,生成的缩略图大小为71*100,保持原图的宽高比

裁剪图像区域

  • 使用PIL中的crop()方法可以从一幅图像中裁剪指定区域,该区域使用四元组来指定,四元组的坐标依次是(左,上,右,下)PIL中指定坐标系的左上角坐标为(0,0).
from PIL import Image
import matplotlib.pyplot as plt
import numpy as np
image=Image.open('D:/test.jpg')
box=(500,500,2500,2500)
region=image.crop(box)
data=np.array(region)
plt.imshow(data)
plt.show()

调整尺寸和旋转

  • 我们用resize()方法来调整一幅图像的尺寸,该方法的参数是一个元组,用来指定新图像的大小:例如 out=image.resize((32,32))
  • 要旋转一幅图像,可以使用逆时针方式表示旋转角度,然后用rotate()方法
from PIL import Image
import matplotlib.pyplot as plt
image=Image.open('D:/test.jpg')#读取图像
plt.imshow(image.rotate(180))#逆时针旋转180度
plt.show()#需要调用show()方法,不然图像只会在内存中而不显示出来

出处:https://www.cnblogs.com/LouieZhang/p/8529241.html

转载于:https://www.cnblogs.com/mq0036/p/8547594.html

python做基本的图像处理相关推荐

  1. 干货 | 用Python做图像处理:图像导数实战

    导读:数量庞大的图像和视频充斥着我们的生活.我们需要对图片进行检索.分类等操作时,利用人工手段显然是不现实的.于是,计算机视觉相关技术便应运而生,并且得到了快速的发展.本文以时下最流行的Python语 ...

  2. 用Python做图像处理

    用Python做图像处理        最近在做一件比较 evil 的事情--验证码识别,以此来学习一些新的技能.因为我是初学,对图像处理方面就不太了解了,欲要利吾事,必先利吾器,既然只是做一下实验, ...

  3. 一步一步教你如何用python做词云_一步一步教你如何用Python做词云

    前言 在大数据时代,你竟然会在网上看到的词云,例如这样的. 看到之后你是什么感觉?想不想自己做一个? 如果你的答案是正确的,那就不要拖延了,现在我们就开始,做一个词云分析图,Python是一个当下很流 ...

  4. python科学计算基础教程pdf下载-用Python做科学计算 高清晰PDF

    用Python做科学计算一书介绍如何用Python开发科学计算的应用程序,除了介绍数值计算之外,我们还将着重介绍如何制作交互式的2D.3D图像:如何设计精巧的程序界面:如何和C语言所编写的高速计算程序 ...

  5. python 科学计算设计_用Python做科学计算 高清晰PDF

    用Python做科学计算一书介绍如何用Python开发科学计算的应用程序,除了介绍数值计算之外,我们还将着重介绍如何制作交互式的2D.3D图像:如何设计精巧的程序界面:如何和C语言所编写的高速计算程序 ...

  6. python图像库_Python常用图像处理库整理

    1. 库简介 深度学习领域,对视频图片样本的处理占了很大一部分比重. 而Python环境下的图像处理库种类较多,无论是精度,速度等方面都有不同的差异,这里予以总结. Python环境下,相关的包有: ...

  7. python进行基本的图像处理

    转自 http://www.ituring.com.cn/tupubarticle/2024 第 1 章 基本的图像操作和处理 本章讲解操作和处理图像的基础知识,将通过大量示例介绍处理图像所需的 Py ...

  8. python做图片美化_python图片美化

    广告关闭 腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元! 功能性是开发的第一要务每一个 python 图形界面库都有它自有的功能特性和界面 ...

  9. 嘿嘿!我用Python做了个孙悟空玩转如意金箍棒

    马上暑假就要到了,很多小朋友也要放假啦.暑假里最熟悉的电视节目,非<西游记>莫属了,对于这部电视剧,想必大家不会陌生,小编最喜欢的就是孙悟空手里的如意金箍棒,此棒重一万三千五百斤,可自由伸 ...

最新文章

  1. MySQL常见命令 [转]
  2. Win32程序中使用Combo box控件
  3. HttpDNS功能说明及实现
  4. python显示目录中的文件_Python中的文件和目录操作实现
  5. Android 调用12306接口,GitHub - AndroidyxChen/loading-12306: 仿PC端12306的刷新loading的自定义view...
  6. 2018怎么更换图框_2018 乐博睿 全年回顾
  7. iservice封装有哪些方法_对WebService的一些封装技巧总结
  8. 海外仓储系统快速提升企业仓储物流效能的最有效手段?
  9. java random api_API中的Scanner、Random、ArrayList、String类
  10. LeetCode 386. Lexicographical Numbers
  11. Leetcode 558.四叉树交集
  12. python安装包方式汇总
  13. 供应链运作参考模型(SCOR):一种用于改善供应链管理的模型
  14. 如何自制一款智能AI离线语音小夜灯
  15. 今日干货:PDF转Word工具有哪些?
  16. 60题计算机专业知识点,计算机考试题库:计算机考试练习题(60)
  17. java学习路线(阿里p6)
  18. 报告:非洲加密货币诈骗活动比例低于世界其他地区
  19. html引导蒙层,web开发中实现图标点击态蒙层
  20. 什么是挂载,Linux挂载如何实现详解

热门文章

  1. 利用ngnix解决跨域问题
  2. 【BZOJ-2938】病毒 Trie图 + 拓扑排序
  3. 揭秘企业级web负载均衡完美架构
  4. Resharper 的快捷键
  5. IPhone 应用程序管理
  6. 关于Linux系统下在使用close关闭串口设备时引起的内核崩溃问题解决方法
  7. class ts 扩展方法_JUnit 5自定义扩展
  8. java葵花宝典_JAVA程序员想入职跳槽,这些基本功一定要做好,你给自己打几分?...
  9. redis服务的部署
  10. 最短Hamilton路径(状压dp)