首页 > 编程语言 >python学习_PIL的Image模块初步使用

python学习_PIL的Image模块初步使用

时间:2023-01-11 20:45:01浏览次数:37  
标签:PIL img python MAX Image pic range 255

基本介绍:

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

标签:PIL,img,python,MAX,Image,pic,range,255
From: https://www.cnblogs.com/Mar10/p/17044844.html

相关文章

  • python 类初始化的注意事项
    自己写了一个Chessboard类:classChessboard(VGroup):def__init__(self,shape:tuple=(8,8),height:float=1,width:......
  • Python学习笔记-常用模块介绍--时间模块
    1.时间模块分为哪三种格式?1.时间戳2.格式化字符串3.结构化时间 2.时间的示例#1.时间戳---常用于运算的print(time.time())#2.格式化字符串---用于显示,方......
  • Python学习笔记-常用模块介绍--猴子补丁
    1.什么是猴子补丁?属性在运行时的动态替换,叫做猴子补丁(MonkeyPatch)【发音ˈmʌŋkipætʃ】是一种思想,应用于团队引用了公共模块,想丰富模块,就在入口打这种“猴子补......
  • Python环境配置
    打开命令窗口三种方法:1.win+rcmd2.我的电脑cmd3.搜索命令提示符打开输入python进入交互式界面pipinstall(安装)request(爬虫模块)输入exit()退出pip下载他人的代码使用(类......
  • 【接口自动化测试】Python基础-字符串格式化
    """字符串格式化"""name='Jenny'age=30x="mynameis%s,ageis20"%nameprint(x)x1="mynameis%s,ageis%s"%(name,age)print(x1)#第二种y="myname......
  • Python运算符
    假设a=10b=201.算数运算符运算符描述+加-减*乘/除%取余数**幂——次方//取整除 2.比较(关系)运算符运算符描述==等于......
  • python:批量修改文件名批量修改图片尺寸
    批量修改文件名 参考博客:https://www.cnblogs.com/zf-blog/p/7880126.html功能:批量修改文件名12345678910111213141516171819202122......
  • Appium+python之APP自动化二(app启动)
    使用python编写脚本对app完成自动启动的操作准备工作参考前篇:Appium+python之APP自动化一一、python启动app的配置fromappiumimportwebdriver#后续操作依赖于这个......
  • 基于python的小波阈值去噪算法
    小波图像去噪原理图像和噪声在经小波变换后具有不同的统计特性:图像本身的能量对应着幅值较大的小波系数,主要集中在低频(LL)部分;噪声能量则对应着幅值较小的小波系数,并分散在......
  • 图像识别四大图像库比较:OpenCV/FreeImage/CImg/CxImage
    OpenCV功能十分的强大,而且支持目前先进的图像处理技术,体系十分完善,操作手册很详细,手册首先给大家补计算机视觉的知识,几乎涵盖了近10年内的主流算法,然后将图像格式和矩阵......