技术学习笔记之 PIL 模块

416 字
2 分钟
技术学习笔记之 PIL 模块

1. 导入模块#

from PIL import Image

2. 打开图片#

fn = Image.open("tiger.jpg")

3. 获取图像属性#

a = fn.size # (width, height) 元组
a = fn.width # 宽度
a = fn.height # 高度
a = fn.mode # 模式:RGB 彩色、L 灰度、P 256色、1 黑白色
a = fn.format # 图片格式:jpg, png, bmp ……

4. 对图像进行处理#

fn = fn.rotate(-90) # 角度制;逆时针旋转
fn = fn.resize((fn.width//2, fn.height//2)) #
fn = fn.show() # 显示图像
fn = fn.convert("L") # 转换模式
fn.save("test.bmp") # 保存图像,自动匹配格式
fn.close() # 关闭图像

5. 像素操作#

pix = fn.load() # 获取全部像素
tpix = pix[i, j] # 获取像素点,其类型取决于图片模式
R, G, B = fn.getpixel((i, j)) # 直接获取像素
new_img.putpixel((i, j), new_pixel) # 写入像素
new_pixel = int(0.299*R + 0.857*G + 0.144*B) # RGB转灰度

6. 示例代码#

convert_manually.py
from PIL import Image
img = Image.open("tiger.jpg")
pix = img.load()
THERESHOLD = 132
new_img = Image.new("L", img.size) # create a blank image in gray mode
new_img2 = Image.new("1", img.size) # create a blank image in 0/1 mode
x, y = img.size
for i in range(x):
for j in range(y):
R, G, B = img.getpixel((i, j))
new_pixel = int(0.299*R + 0.857*G + 0.144*B) # convert to gray mode
new_img.putpixel((i, j), new_pixel) # put a pixel in gray mode
new_img2.putpixel((i, j), (0 if new_pixel < THERESHOLD else 1))
new_img.save("tiger_L.jpg")
new_img2.save("tiger_1.jpg")
new_img.close()
new_img2.close()
img.close()

原图:

灰度:

单色:

make_frames.py
from PIL import Image
for THERESHOLD in range(0, 256):
img = Image.open("tiger.jpg")
pix = img.load()
new_img2 = Image.new("1", img.size) # create a blank image in 0/1 mode
x, y = img.size
for i in range(x):
for j in range(y):
R, G, B = img.getpixel((i, j))
new_pixel = int(0.299*R + 0.857*G + 0.144*B) # convert to gray mode
new_img2.putpixel((i, j), (0 if new_pixel < THERESHOLD else 1))
new_img2.save("./output/{}.jpg".format(THERESHOLD))
new_img2.close()
img.close()
identification_of_coating_cards.py
from PIL import Image
img = Image.open("one-bw.png")
width, height = img.size
RATE = 0.64
cnt = 0
for i in range(width):
for j in range(height):
# print(img.getpixel((i, j)))
if(img.getpixel((i, j)) != 255):
cnt += 1
print(cnt, width*height*RATE)
if(cnt > width*height*RATE):
print("FILLED.")
else:
print("UNFILLED.")

支持与分享

如果这篇文章对你有帮助,欢迎分享给更多人或赞助支持!

赞助
技术学习笔记之 PIL 模块
https://www.0x3f.foo/posts/图像模块学习/
作者
Dignite
发布于
2024-01-24
许可协议
CC BY-NC-SA 4.0

评论区

Profile Image of the Author
Dignite
When nothing goes right, go left.
公告
欢迎来到我的博客!这是一则示例公告。
分类
标签
站点统计
文章
146
分类
5
标签
271
总字数
314,753
运行时长
0
最后活动
0 天前

目录