关于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 ...
随机推荐
- 134-PHP子类重写父类方法,并调用父类方法
<?php class father{ //定义father类 public function method(){ //定义方法 echo '<br />father method' ...
- 关于C#设计SQllite
使用3.5框架+System.Data.SQLite,System.Data.SQLite.Ling+SQLite.Designer三个dll
- 【Python】【Django】查询所有学生信息
要做到以下效果: 改代码后效果: 从0开始顺序计数: 倒叙计数到0
- DataGridView在HeaderCell显示行号
直接显示在HeaderCell中.,效果如下: 1.RowStateChanged事件触发 2.如果仅用于数据展示,RowStateChanged事件会触发多次,数据量过大会卡死,因此,使用了Colu ...
- 用Python复制文件的9个方法(转)
转自:https://zhuanlan.zhihu.com/p/35725217 用Python复制文件的9个方法 Python 中有许多“开盖即食”的模块(比如 os,subprocess 和 sh ...
- 洛谷 P2370 yyy2015c01的U盘
题目传送门 解题思路: 先将每个文件按照占空间从小到大排序,然后跑背包,当到了某一个文件时,价值够了,那么当前文件的体积就是答案. 其实本题是可以二分答案的,但是写挂了... AC代码: #inclu ...
- 19 01 18 dango 模型
定义属性 Django根据属性的类型确定以下信息: 当前选择的数据库支持字段的类型 渲染管理表单时使用的默认html控件 在管理站点最低限度的验证 django会为表创建自动增长的主键列,每个模型只能 ...
- 量化投资_Multicharts数组操作函数_append()追加函数(自定义)
1. Multicharts中关于数组的操作比较麻烦,而且当中所谓的动态数组的定义并不是像其他语言那种的概念.因此要对数组进行元素“”追加“”的话,需要重新更改数组的索引,然后再最后一个位置添加val ...
- Java IO 乱码
InputStreamReader isr = new InputStreamReader(new FileInputStream("./test/垃圾短信训练集80W条.txt" ...
- POJ 1663:Number Steps
Number Steps Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 13664 Accepted: 7378 Des ...