最新要闻

广告

手机

iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?

iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?

警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案

警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案

家电

python图像处理库

来源:博客园
pillow是python图像处理的第三方库,可以对图片进行加载、显示、保存、剪切、黏贴、分离、合并等操作。

Pillow基本使用


(资料图片)

新建一张图片im = Image.new("RGBA", (width, height))加载图片im = Image.open("Mycat.jpg")显示图片im.show()另存为其他格式im.save("Mycat.png")图片剪切box = (x1, y1 ,x2, y2) #图片左上角是坐标原点,横轴为x,纵轴为y,x2>=x1,y2>=y1im.crop(box)       #剪切出来的图片是各点划线所围的矩形图片粘贴(一张图片覆盖到另一张图上面)im2 = Image.open("Mydog.jpg")im.paste(im2)  #把im2贴到im上处理gifim = Image.open("Mypig.gif")im.tell()  #显示当前帧数im.seek(1) #移动到指定帧im.show()读取像素值,色深可以为1,8,24,32位im.getpixel((x, y))    #图片左上角是坐标原点,横轴为x,纵轴为y修改像素值im.putpixel((x, y), (0, 0, 0))    #rgb(0, 0, 0),黑色,24位色深

取出GIF每一帧,合成为新的图片

gif把完整的图片细分成很多小的切片。

先取出gif的每一帧,存放在指定目录里

#!/usr/bin/env python3from PIL import Imagegif = Image.open("glance.gif")gif.save(f"frame/{gif.tell()}.png")while True:        gif.seek(gif.tell() + 1)        gif.save(f"frame/{gif.tell()}.png")

得到201张,每张宽高为2*600的图片。  

新建一张图片,把每一帧依次覆盖在新的图片上。

#!/usr/bin/env python3from PIL import Imageim = Image.new("RGBA", (402, 600))w = 0for i in range(201):    gif = Image.open(str(i) + ".png")    box = (w, 0, w+2, 600)    im.paste(gif, box)    w += 2im.show()

获取图片RGB

104张黑白图片,考察01比特流。

im.getpixel((0,0))查看每张图片第一个像素点,可以看到白色图片第一个像素点RGB=(255, 255, 255),黑色图片第一个像素点RGB=(12, 12, 0)。

不知道黑色和白色哪个代表0或1,两种情况都试试

#!/usr/bin/env python3from PIL import Imageimport binasciistreamA = ""streamB = ""for i in range(104):    im = Image.open("gif/" + str(i) + ".jpg")    if(im.getpixel((0,0))[0] == 255):        streamA += "1"        streamB += "0"    else:        streamA += "0"        streamB += "1"#每8位二进制数为一个字节,二进制转为十进制,十进制转为asciistreamA_ascii = [chr(int(streamA[i:i+8], 2)) for i in range(0, len(streamA), 8)]streamB_ascii = [chr(int(streamB[i:i+8], 2)) for i in range(0, len(streamB), 8)]print("".join(streamA_ascii))print("".join(streamB_ascii))

最低有效位

题目:最低位的亲吻

获得一个8位色深的图片。

处理思路:像素最低位为1时,像素取值为255;像素最低位为0时,像素取值为0。

#!/usr/bin/env python3from PIL import Imageim = Image.open("01.png")width,height = im.sizefor i in range(width):    for j in range(height):        if im.getpixel((i, j)) & 0x1 == 1:            im.putpixel((i, j), 255)        else:            im.putpixel((i, j), 0)im.show()

得到隐写的二维码 

关键词: