为了加深理解,写了一些代码测试,在这里记录一下吧:

关于图片的模式问题,之前做过笔记,有“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模块的一些测试代码的更多相关文章

  1. python之PIL库(Image模块)

    PIL(Python Image Library)是python的第三方图像处理库,PIL的功能非常的强大,几乎被认定是Python的官方图像处理库了. 由于PIL仅支持到python2.7于是一群志 ...

  2. 人脸识别引擎SeetaFaceEngine中Detection模块使用的测试代码

    人脸识别引擎SeetaFaceEngine中Detection模块用于人脸检测,以下是测试代码: int test_detection() { std::vector<std::string&g ...

  3. 人脸识别引擎SeetaFaceEngine中Identification模块使用的测试代码

    人脸识别引擎SeetaFaceEngine中Identification模块用于比较两幅人脸图像的相似度,以下是测试代码: int test_recognize() { const std::stri ...

  4. 人脸识别引擎SeetaFaceEngine中Alignment模块使用的测试代码

    人脸识别引擎SeetaFaceEngine中Alignment模块用于检测人脸关键点,包括5个点,两个眼的中心.鼻尖.两个嘴角,以下是测试代码: int test_alignment() { std: ...

  5. PIL库的总结及运用

    PIL库的总结:(以代码形式) #date: 2018/11/15 from PIL import Image,ImageFilter,ImageDraw,ImageFont #####除了缩略图的方 ...

  6. PIL库参考文档之Image模块

    原文: https://pillow-cn.readthedocs.io/zh_CN/latest/reference/Image.html 中文版参考文档不全,所以自己试着翻译了一下,以下~备注部分 ...

  7. Python 之 使用 PIL 库做图像处理

    http://www.cnblogs.com/way_testlife/archive/2011/04/17/2019013.html Python 之 使用 PIL 库做图像处理 1. 简介. 图像 ...

  8. 关于PIL库的一些概念

    关于PIL库的一些概念 pil能处理的图片类型pil可以处理光栅图片(像素数据组成的的块). 通道一个图片可以包含一到多个数据通道,如果这些通道具有相同的维数和深度,Pil允许将这些通道进行叠加 模式 ...

  9. 解析库-beautifulsoup模块

    # -*- coding: utf-8 -*- from bs4 import BeautifulSoup # 安装:pip install beautifulsoup4 # Beautiful So ...

随机推荐

  1. Web前端开发CSS规范总结

    作为Web前端开发必备语言,CSS为大家广为熟知,今天就跟大家分享下CSS规范总结,Web前端的小伙伴们看过来吧! CSS样式的权值(权重) 权值等级的定义 第一等:代表内联样式,如: style=” ...

  2. Ubuntu 14.04 安装 Dash to Dock

    每次打开或选择一个已经打开的应用都要把鼠标指到左上角,相当费事. Ubuntu 14.04 GNOME自带 Tweaks (系统中名为:优化工具),可以使界面如Windows般(最小化.最大化.底部任 ...

  3. 留学Essay写作:从入门到精通

    Essay作为最常见的英国大学作业形式,几乎是每个留学生都绕不过去的任务. 大部分人提到自己在英国的大学生活,都会回想起无数个“血泪交加”的夜晚,从白天到傍晚再到深夜,点灯熬油的查资料,写essay. ...

  4. 十四、 React路由(react-router4.x): 动态路由、get传值、React中使用url模块

    概述 新闻列表 -跳转-> 详情页 时,想把列表对应的id传到详情页里,可用到三种传值方法: 1.动态路由传值 2.get传值 3.localstorage传值 一.动态路由传值 [App.js ...

  5. sql select 0 字段 某字段是不在指定的表

    sql select 0 字段 转自   关于 select 语句中 0 某字段名字,的意思是:该某字段是不在指定的表中的,那么如果要在子查询中利用这个指定的表,且带有这个字段,那么就用这个方式来添加 ...

  6. 代理模式(Proxy Pattern)C#版本的

    引用地址 https://www.cnblogs.com/zhili/p/ProxyPattern.html --------------------------------------------- ...

  7. ES6模块化深入 debug

    引子: 2020.2.24.最近刚写完一个vue项目.项目用到ES6的模块化 想到之前写node项目用到过commonjs模块化 就想着把所有用到过的模块化技术 总结学习一下 在看阮一峰老师的 es6 ...

  8. UVA - 10791 Minimum Sum LCM(最小公倍数的最小和)

    题意:输入整数n(1<=n<231),求至少两个正整数,使得它们的最小公倍数为n,且这些整数的和最小.输出最小的和. 分析: 1.将n分解为a1p1*a2p2……,每个aipi作为一个单独 ...

  9. BZOJ:1927: [Sdoi2010]星际竞速

    题解:最小费用流+二分图模型: 左边表示出这个点,右边表示入这个点: #include<iostream> #include<cstdio> #include<cstri ...

  10. Eclipse 快速打开文件所在的本地目录

    目前收集到两种方法: 1.快捷键:Ctrl+Shift+W 2.利用Eclipse的External Tools设置快捷方式 第二种方法步骤: a.Run->External Tools-> ...