关于PIL库Image模块的一些测试代码
为了加深理解,写了一些代码测试,在这里记录一下吧:
关于图片的模式问题,之前做过笔记,有“1”,“L”,"P","RGB","RGBA","CMYK',"YCBCr","Note","LAB"等,这几种图片模式有什么区别呢?
#001
from PIL import Image
img1=Image.new("1",(3,3))
data1=img1.getdata()
print(list(data1))
img2=Image.new("L",(3,3))
data2=img2.getdata()
print(list(data2))
img3=Image.new("P",(3,3))
data3=img3.getdata()
print(list(data3))
img4=Image.new("RGB",(3,3))
data4=img4.getdata()
print(list(data4))
img5=Image.new("CMYK",(3,3))
data5=img5.getdata()
print(list(data5))
>>
[0, 0, 0, 0, 0, 0, 0, 0, 0]
[0, 0, 0, 0, 0, 0, 0, 0, 0]
[0, 0, 0, 0, 0, 0, 0, 0, 0]
[(0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0)]
[(0, 0, 0, 0), (0, 0, 0, 0), (0, 0, 0, 0), (0, 0, 0, 0), (0, 0, 0, 0), (0, 0, 0, 0), (0, 0, 0, 0), (0, 0, 0, 0), (0, 0, 0, 0)]
可以看出"1","L",“P”模式都是用一位表示颜色值,而"RGB'使用3位表示颜色值,"RGBA","CMYK"等用四位来表示
#002
from PIL import Image
img1=Image.new("",(3,3),18)
data1=img1.getdata()
print(list(data1)) img1.save("2.png")
img_1=Image.open("2.png")
print(list(img_1.getdata()))
>>
[18, 18, 18, 18, 18, 18, 18, 18, 18]
[255, 255, 255, 255, 255, 255, 255, 255, 255]
之前说"1"模式只有黑白两种颜色,一个像素也是用一位表示,那试着在创建它的时候给它设置一个非黑白色的颜色,结果保存再读取出来的,又自动变成黑色了
#003
from PIL import Image
img1=Image.new("L",(3,3),(30,30,30))
data1=img1.getdata()
print(list(data1))
>>TypeError: function takes exactly 1 argument (3 given)
#004
from PIL import Image
img1=Image.new("RGB",(3,3),(30,30,30))
data1=img1.getdata()
print(list(data1)) img1.save("2.png")
img_1=Image.open("2.png")
print(list(img_1.getdata()))
>>
[(30, 30, 30), (30, 30, 30), (30, 30, 30), (30, 30, 30), (30, 30, 30), (30, 30, 30), (30, 30, 30), (30, 30, 30), (30, 30, 30)]
[(30, 30, 30), (30, 30, 30), (30, 30, 30), (30, 30, 30), (30, 30, 30), (30, 30, 30), (30, 30, 30), (30, 30, 30), (30, 30, 30)]
创建“L”模式时,给它传入一个rgb值报错了,“RGB”模式则可以。
然后,对于RGB模式去亮色转灰色有点好奇,在网上找到很多方法,不明所以,但是有几个公式可以用,其中一个是:
gray=R*0.3+G*0.59+B*0.11,顺便试了一下
#005
from PIL import Image
img1=Image.new("RGB",(100,100),(135,206,235))
#img1.show()
gray=135*0.3+206*0.59+235*0.11
img2=Image.new("RGB",(100,100),(int(gray),int(gray),int(gray)))
print(str(gray))
print(str(int(gray)))
img2.show()
#006
from PIL import Image
img1=Image.open("f:\cat.jpg")
or_data=list(img1.getdata())
#print(or_data)
gr_data=[]
for pix in or_data:
i=pix[0]*0.3+pix[1]*0.59+pix[2]*0.11
j=int(i)
gr_pix=(j,j,j)
gr_data.append(gr_pix) gr_img=Image.new("RGB",(img1.size[0],img1.size[1]))
gr_img.putdata(gr_data)
gr_img.show()
转化效果


关于PIL库Image模块的一些测试代码的更多相关文章
- python之PIL库(Image模块)
PIL(Python Image Library)是python的第三方图像处理库,PIL的功能非常的强大,几乎被认定是Python的官方图像处理库了. 由于PIL仅支持到python2.7于是一群志 ...
- 人脸识别引擎SeetaFaceEngine中Detection模块使用的测试代码
人脸识别引擎SeetaFaceEngine中Detection模块用于人脸检测,以下是测试代码: int test_detection() { std::vector<std::string&g ...
- 人脸识别引擎SeetaFaceEngine中Identification模块使用的测试代码
人脸识别引擎SeetaFaceEngine中Identification模块用于比较两幅人脸图像的相似度,以下是测试代码: int test_recognize() { const std::stri ...
- 人脸识别引擎SeetaFaceEngine中Alignment模块使用的测试代码
人脸识别引擎SeetaFaceEngine中Alignment模块用于检测人脸关键点,包括5个点,两个眼的中心.鼻尖.两个嘴角,以下是测试代码: int test_alignment() { std: ...
- PIL库的总结及运用
PIL库的总结:(以代码形式) #date: 2018/11/15 from PIL import Image,ImageFilter,ImageDraw,ImageFont #####除了缩略图的方 ...
- PIL库参考文档之Image模块
原文: https://pillow-cn.readthedocs.io/zh_CN/latest/reference/Image.html 中文版参考文档不全,所以自己试着翻译了一下,以下~备注部分 ...
- Python 之 使用 PIL 库做图像处理
http://www.cnblogs.com/way_testlife/archive/2011/04/17/2019013.html Python 之 使用 PIL 库做图像处理 1. 简介. 图像 ...
- 关于PIL库的一些概念
关于PIL库的一些概念 pil能处理的图片类型pil可以处理光栅图片(像素数据组成的的块). 通道一个图片可以包含一到多个数据通道,如果这些通道具有相同的维数和深度,Pil允许将这些通道进行叠加 模式 ...
- 解析库-beautifulsoup模块
# -*- coding: utf-8 -*- from bs4 import BeautifulSoup # 安装:pip install beautifulsoup4 # Beautiful So ...
随机推荐
- 030-PHP日期查询函数
<?php , , ))//检查日期函数 { print("2,18,1970 :" . "这是一个正确的日期格式"); } else { print(& ...
- 4. 异步多级缓存架构+nginx数据本地化渲染
- Django实现websocket
django实现websocket大致上有两种方式,一种channels,一种是dwebsocket.channels依赖于redis,twisted等 一 dwebsocket 1 Django实现 ...
- kubernter相关内容
1. Kubernetes 第一章:互联网架构的演变 随着1946年世界上第一台电子计算机的问世网络就随之出现了,只不过当初只是为了解决多个终端之间的连接,这就是局域网的雏形.后来,随着美国国防部高级 ...
- HDU - 4576 Robot(概率dp+滚动数组)
题意:所有的格子围成一个圈,标号为1~n,若从格子1出发,每次指令告知行走的步数,但可能逆时针也可能顺时针走,概率都是1/2,那么问走了m次指令后位于格子l~r(1≤l≤r≤n)的概率. 分析: 1. ...
- UVA - 1611 Crane(起重机)(贪心)
题意:输入一个1~n(1<=n<=10000)的排列,用不超过9^6次操作把它变成升序.每次操作都可以选一个长度为偶数的连续区间,交换前一半和后一半. 提示:2n次操作就足够了. 分析:从 ...
- vue.js实现自定义输入分页
效果如下: html: <input type="text" value="1" v-model="page.page_my_selected& ...
- 中国移动携手华为百度展示5G应用,实现8K视频传输
在今日举行的 2019 年百度云智峰会上,中国移动携手华为和百度,首次展示基于 SA 架构的 5G Vertical LAN (行业局域网)技术,承载 8K 实时会议系统,助力企业云办公.该技术可为合 ...
- 关于SI522替代FM17522和MFRC522的资料对比
以下是SI522与FM17522.MFRC522的对比参数: SI522是完全PIN对PIN软硬件兼容MFRC522.CV520.FM17522,另外我们可提供一对一技术支持解决客户所遇到的问题: 1 ...
- 数据结构顺序表中Sqlist *L,&L,Sqlist *&L
//定义顺序表L的结构体 typedef struct { Elemtype data[MaxSize]: int length; }SqList; //建立顺序表 void CreateList(S ...