当前位置:
首页 > python入门教程 >
-
python学习_PIL的Image模块初步使用
基本介绍:
Pillow 是 Python 中较为基础的图像处理库,主要用于图像的基本处理,比如裁剪图像、调整图像大小和图像颜色处理等。与 Pillow 相比,OpenCV 和 Scikit-image 的功能更为丰富,所以使用起来也更为复杂,主要应用于机器视觉、图像分析等领域,比如众所周知的“人脸识别”应用 。
Image模块:
Image模块是PIL最基本的模块,其中导出了Image类,一个Image类实例对象就对应了一副图像。同时,Image模块还提供了很多有用的函数。
本文只是初步学习了一些用法与实际操作。
基础函数:
基础运用:
加载图片
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
栏目列表
最新更新
go语言写http踩得坑
【Python】爬虫笔记-从PyMySQL到DBUtils
【Python】爬虫笔记-开源代理池haipproxy使用
Python规范:提高可读性
C语言两结构体之间的成员互换
【爬虫实战项目】Python爬取Top100电影榜单
linux(Ubuntu)安装python
anaconda peompt 、labalimg 数据标注
【Python数据分析案例】python数据分析老番
【爬虫+情感判定+Top10高频词+词云图】“
一次SQL调优 聊一聊 SQLSERVER 数据页
聊一聊 SQLSERVER 的行不能跨页
再聊一下那 SQLSERVER 行不能跨页的事
大数据概述
支线第九篇:
数据库的值获取过来转换成Json数组的方法
支线第八篇:数据类型转换
支线第七篇:又是解决报错
支线第六篇:停下脚步,理清思路
支线第五篇:配置接口
【JS】原始类型是值类型吗?存储在栈上
C# List<T> 转 DataTable
C# List<T> 转 DataTable
C# List<T> 转 DataTable 方法修改版
使用插件式开发称重仪表驱动,RS232串口
实现简单的csv文件上传和bootstrap表格的下
第一百一十七篇: JavaScript 工厂模式和原型
第一百一十六篇: JavaScript理解对象
第一百一十五篇: JS集合引用类型Map
第一百一十四篇: JS数组Array(三)数组常