python学习_PIL的Image模块初步使用
基本介绍:
Pillow 是 Python 中较为基础的图像处理库,主要用于图像的基本处理,比如裁剪图像、调整图像大小和图像颜色处理等。与 Pillow 相比,OpenCV 和 Scikit-image 的功能更为丰富,所以使用起来也更为复杂,主要应用于机器视觉、图像分析等领域,比如众所周知的“人脸识别”应用 。
Image模块:
Image模块是PIL最基本的模块,其中导出了Image类,一个Image类实例对象就对应了一副图像。同时,Image模块还提供了很多有用的函数。
本文只是初步学习了一些用法与实际操作。
基础函数:
| 函数名 | 简介 |
|---|---|
| open() | 打开图片 |
| save("test.gif","GIF") | 保存(新图片路径和名称,保存格式) |
| show() | 显示图片 |
| size | 是img图片对象的成员数据,是一个元组,包含了像素宽度和像素高度 |
| Image.new() | 生成新的图片 |
| getpixel((1,1)) | 获取像素点(1,1)三通道信息 |
| putpixel() | 设置像素点三通道信息 |
基础运用:
加载图片
from PIL import Image
pic=Image.open('test.jpg') #打开图片:打开'test.jpg',将文件数据返给img图片对象
pic.show() #显示pic中的图片内容
x,y=pic.size #获取图片的像素宽度与高度
print(x*y) #获取图片的像素点数
遍历img图片的每一个像素并操作的程序框架
x,y = img.size
for i in range(x):
for j in range(y):
img图片对象是三通道的,每个像素点包含红、绿、蓝三种通道的信息。
img.getpixel()接受一个包含像素点坐标的元组作为传入参数,并传回该点的三通道值。注意传入的是元组,所以不要漏写函数接口括号和元组本身的括号
例如img.getpixel((12,12))就代表了(12,12)的像素点的三通道信息
编辑图片
pic = Image.new() 生成新的图片对象pic(传入两个参数,第一个是模式字符串(‘L’是8位像素黑白灰色,'RGB'是真彩色),第二个是大小元组)
pic = Image.new('L', (80, 100))
pic=Image.new("RGB",(MAX,MAX))
pic.putpixel()设置像素点的三通道信息(传入两个参数,第一个是坐标元组,第二个是颜色,单通道颜色是一个数值(0是黑色),多通道颜色是一个元组)
L: pic.putpixel((i, j), 0)
RGB: pic.putpixel([x,y],(0,0,0))
实例:
0 1转化为二维码
from PIL import Image
MAX = 25 #数字的长度为一个整数的平方(如25^2=625,因为01的总数量为625)
pic = Image.new("RGB",(MAX, MAX))
str = "1111111000100001101111111100000101110010110100000110111010100000000010111011011101001000000001011101101110101110110100101110110000010101011011010000011111111010101010101111111000000001011101110000000011010011000001010011101101111010101001000011100000000000101000000001001001101000100111001111011100111100001110111110001100101000110011100001010100011010001111010110000010100010110000011011101100100001110011100100001011111110100000000110101001000111101111111011100001101011011100000100001100110001111010111010001101001111100001011101011000111010011100101110100100111011011000110000010110001101000110001111111011010110111011011"
i=0
for y in range(MAX):
for x in range(MAX):
if str[i]=='1':
pic.putpixel([x,y],(0,0,0))
else:
pic.putpixel([x,y],(255,255,255))
i+=1
pic.save('out.png')
像素点三通道信息转二维码
同样的思想,先转01,再转图片
qr.txt部分内容
(0, 0, 0)
(0, 0, 0)
(0, 0, 0)
(255, 255, 255)
(255, 255, 255)
from PIL import Image
pixel = open('qr.txt','r').readlines();
res = "";
for i in pixel:
i = i.strip('\n') #strip()方法用于移除字符串头部、尾部指定字符
# print(i)
if i == "(255, 255, 255)":
res += '1';
elif i == "(0, 0, 0)":
res += '0';
n=0
MAX=200
pic = Image.new("RGB",(MAX, MAX))
for y in range(MAX):
for x in range(MAX):
if res[n]=='1':
pic.putpixel([x,y],(255,255,255))
else:
pic.putpixel([x,y],(0,0,0))
n+=1
pic.save('input.png','png')
结合itertools更便捷
import itertools
from PIL import Image
max = 200
file = open("qr.txt", "r")
img = Image.new("RGB", (max, max))
for y, x in itertools.product(range(max), range(max)):
pixel = eval(file.readline()) #将字符串当成有效的表达式来求值,并返回计算结果
img.putpixel([x, y], pixel)
img.save('input.png','png')
解释:
itertools.product():以元组的形式,根据输入的可遍历对象生成笛卡尔积
实例:
import itertools
max=3
for x,y in itertools.product(range(max),range(max)):
print(x,y)
result:
0 0
0 1
0 2
1 0
1 1
1 2
2 0
2 1
2 2
python学习_PIL的Image模块初步使用的更多相关文章
- Python学习(六)模块
Python 模块 模块定义 随着程序越来越庞大,需要分隔成几个文件:也需要能在不同文件中复用函数.类和变量,而不是拷贝代码.为了满足这些需要,Python提供了模块. 简单来说,模块就是一个保存了P ...
- 【Python学习之九】模块
环境 虚拟机:VMware 10 Linux版本:CentOS-6.5-x86_64 客户端:Xshell4 FTP:Xftp4 python3.6 一.模块的使用和安装模块和C语言中的头文件以及Ja ...
- Python 学习笔记(6)--常用模块(2)
一.下载安装 下载安装有两种方式: yum\pip\apt-get 或者源码 下载源码 解压源码 进入目录 编译源码 python setup.py build 安装源码 python setup.p ...
- python学习笔记之常用模块(第五天)
参考老师的博客: 金角:http://www.cnblogs.com/alex3714/articles/5161349.html 银角:http://www.cnblogs.com/wupeiqi/ ...
- Python学习(14)模块一
目录 Python 模块 import语句 from ... import 语句 from ... import * 语句 定位模块 PYTHONPATH变量 命名空间和变量 dir()函数. glo ...
- python学习小结6:模块
模块:在Python中有一个概念叫做模块(module),简单地说,模块就是一个保存了Python代码的文件. 模块能定义函数,类和变量,模块里也能包含可执行的代码. ...
- python学习笔记13(模块、包)
在Python中有一个概念叫做模块(module),比如在Python中要调用sqrt函数,必须用import关键字引入math这个模块,下面就来了解一下Python中的模块. 模块文件以.py后缀结 ...
- Python学习笔记十_模块、第三方模块安装、模块导入
一.模块.包 1.模块 模块实质上就是一个python文件.它是用来组织代码的,意思就是把python代码写到里面,文件名就是模块的名称,test.py test就是模块的名称 2.包 包,packa ...
- Python 学习 第九篇:模块
模块是把程序代码和数据封装的Python文件,也就是说,每一个以扩展名py结尾的Python源代码文件都是一个模块.每一个模块文件就是一个独立的命名空间,用于封装顶层变量名:在一个模块文件的顶层定义的 ...
- python学习之——import sys模块
(1)sys.argv sys模块中的argv变量通过使用点号指明——sys.argv——这种方法的一个优势是这个名称不会与任何在你的程序中使用的argv变量冲突.另外,它也清晰地表明了这个名称是sy ...
随机推荐
- kettle使用4-使用Pan.bat执行转换、Kitchen.bat执行作业
一.直接在spoon中执行作业 使用bat文件执行速度比执行在spoon.bat中执行慢很多,如果少数几个任务,可以直接在spoon中执行. 1.新建作业 2.在通用中,新建START 任务执行的时间 ...
- ETSI GS MEC 014,UE 标识 API
目录 文章目录 目录 版本 功能理解 UML UE Identity tag registration UE Identity tag de-registration API Definition U ...
- grafana模板参考
空的,把面板都删除了 { "__inputs": [ { "name": "DS_PROMETHEUS", "label" ...
- xlwings模块详解
中文文档:https://www.kancloud.cn/gnefnuy/xlwings-docs/1127454 import xlwings#查找包路径print(xlwings.__path__ ...
- Python:用tqdm模块绘制进度条
在计算密集型迭代计算中,我们常常需要知道当前的迭代轮次,最传统的方法就是打印当前迭代计数器的轮数.那有没有更好的方法呢?我们可以使用tqdm模块(非py内置,需要单独按照)来在控制台绘制进度条,这样更 ...
- Python:当函数做为参数时的技巧
我们之前在<Python技法3: 匿名函数.回调函数.高阶函数>中提到,可以通过lambda表达式来为函数设置默认参数,从而修改函数的参数个数: import math def dista ...
- TypingLearn解决了我在学习英语中的一大痛点
上一次在博客园发贴还是在上一次(2021年),那个时候博客园就遇到了危机(被罚款).彼时在疫情期间,我个人生活也受到了影响,先后去了多个城市,最终在上海找到了 .NET Web开发的岗位,还是比较幸运 ...
- vue-cli3 项目路由 history 模式部署到 nginx 服务器
1.项目修改vue.config.js增加 publicPath: '/' 2.nginx配置 location / {#访问前端页面 root /data/dist;#vue项目存放路径 index ...
- firewall防火墙基础配置
Firewalld防火墙 Centos7 中集成了防火墙管理工具, Firewall系统动态防火墙管理器是作为默认的防火墙工具. 它支持规则动态更新,并加入zone区域概念. Firewalld防火墙 ...
- Windows文件管理优化-实用电脑软件(一)
RX文件管理器 (稀奇古怪的小软件,我推荐,你点赞!) 日后更新涉及:电脑.维护.清理.小工具.手机.APP.IOS.从WEB.到到UI.从开发,设计:诚意寻找伙伴(文编类.技术类.思想类)共编,共进 ...