当前位置: 首页 > news >正文

pillow常用知识

一、安装 Pillow

pip install Pillow

二、基本用法

导入 Pillow 中的 Image 模块:

from PIL import Image

三、图像打开与保存

1. 打开图像
img = Image.open('path_to_image.jpg')

2. 保存图像
img.save('path_to_save_image.png')

四、图像基本操作

1. 获取图像信息
print(img.format)  # 图像格式,例如 'JPEG'
print(img.size)    # 图像尺寸 (宽度, 高度)
print(img.mode)    # 图像模式,例如 'RGB', 'L' 等

2. 图像显示
img.show()

3. 改变图像大小
img_resized = img.resize((new_width, new_height))

4. 裁剪图像
box = (left, upper, right, lower)
img_cropped = img.crop(box)

5. 旋转和翻转
img_rotated = img.rotate(90)  # 顺时针旋转 90 度
img_flipped = img.transpose(Image.FLIP_LEFT_RIGHT)  # 水平翻转

五、图像处理

1. 转换图像模式
img_gray = img.convert('L')  # 转为灰度图像
img_rgba = img.convert('RGBA')  # 转为 RGBA 图像

2. 修改图像亮度、对比度

可以使用 ImageEnhance 模块进行增强:

from PIL import ImageEnhanceenhancer = ImageEnhance.Brightness(img)
img_brightened = enhancer.enhance(factor)  # factor > 1 增加亮度,< 1 减少亮度enhancer_contrast = ImageEnhance.Contrast(img)
img_contrasted = enhancer_contrast.enhance(factor)

3. 应用滤镜
from PIL import ImageFilterimg_blurred = img.filter(ImageFilter.BLUR)  # 模糊
img_sharpened = img.filter(ImageFilter.SHARPEN)  # 锐化# 其他滤镜
img_filtered = img.filter(ImageFilter.CONTOUR)

六、绘图操作

使用 ImageDraw 来绘制图形和文本。

from PIL import ImageDraw, ImageFontdraw = ImageDraw.Draw(img)# 绘制矩形
draw.rectangle([x1, y1, x2, y2], outline="red", fill="blue")# 绘制圆形
draw.ellipse([x1, y1, x2, y2], outline="green", fill="yellow")# 绘制文本
font = ImageFont.truetype("arial.ttf", size=20)
draw.text((x, y), "Hello, World!", fill="white", font=font)

七、创建新图像

new_img = Image.new('RGB', (width, height), color=(255, 255, 255))  # 创建白色背景的图像

八、图像合成

可以将多个图像合成在一起:

background = Image.open('background.jpg')
foreground = Image.open('foreground.png')background.paste(foreground, (x, y), foreground)  # 使用 foreground 的 alpha 通道

九、图像幻灯片(GIF)

创建 GIF 动画:

img1 = Image.open('frame1.png')
img2 = Image.open('frame2.png')
img1.save('output.gif', save_all=True, append_images=[img2], duration=500, loop=0)

十、常见问题与技巧

  • 处理大型图像:如果内存不足,可以使用 Image.thumbnail() 方法创建小图。
img.thumbnail((width, height))

  • 错误处理:打开图像时,可以捕获错误以处理无效图像:
try:img = Image.open('invalid_image.jpg')
except IOError:print("Cannot open the image.")

十一、高级功能

1. 图像通道操作
r, g, b = img.split()  # 分离 RGB 通道
img_merged = Image.merge("RGB", (b, g, r))  # 交换通道

2. 图像直方图
histogram = img.histogram()

3. 图像像素操作
pixels = img.load()
width, height = img.sizefor i in range(width):for j in range(height):r, g, b = pixels[i, j]# 修改像素值pixels[i, j] = (r + 10, g + 10, b + 10)

4. 图像蒙版
mask = Image.new('L', img.size, 0)
draw = ImageDraw.Draw(mask)
draw.ellipse((x1, y1, x2, y2), fill=255)img.putalpha(mask)

5. 图像金字塔
img_pyramid = img.pyramid_reduce(scale=2)  # 缩小
img_pyramid_expand = img.pyramid_expand(scale=2)  # 放大

十二、图像分析

1. 边缘检测
from PIL import ImageFilterimg_edges = img.filter(ImageFilter.FIND_EDGES)

2. 轮廓检测
img_contour = img.filter(ImageFilter.CONTOUR)

十三、图像格式转换

img.save('output.png', 'PNG')
img.save('output.bmp', 'BMP')

十四、图像压缩

img.save('output.jpg', 'JPEG', quality=50)  # 质量设置为 50

十五、图像批处理

import osfor filename in os.listdir('images_folder'):if filename.endswith('.jpg'):img = Image.open(os.path.join('images_folder', filename))img_resized = img.resize((new_width, new_height))img_resized.save(os.path.join('output_folder', filename))


http://www.mrgr.cn/news/44049.html

相关文章:

  • JavaScript进行数据可视化:D3.js入门
  • 视频转文字免费的软件有哪些?6款工具一键把视频转成文字!又快又方便!
  • MySql数据引擎InnoDB引起的锁问题
  • 什么是 Koa?
  • VMware WorkStation Pro 15.5(低版本安装) 教学用
  • 优化理论及应用精解【24】
  • 【Redis】持久化(上)---RDB
  • 【数据结构】【链表代码】 回文
  • 高速NOA与城市NOA
  • 通用mybatis-plus查询封装(QueryGenerator)
  • OpenCV图像处理学习前简介
  • Hive数仓操作(六)
  • 洛谷每日一题(P1205 [USACO1.2] 方块转换 Transformations)矩阵变换
  • 微服务架构:核心组件解析与设计思考(服务发现、API网关、 配置中心、负载均衡、服务调用、服务熔断、链路追踪、消息队列、服务安全、分布式事务)
  • [C#]C# winform部署yolov11-pose姿态估计onnx模型
  • Golang 进阶5—— 反射
  • ECML PKDD 2024 | 时空数据(Spatial-Temporal)和时间序列(Time series)论文总结
  • Linux环境下的日志文件的实现
  • mmdetection报错:value error: need at least one array to concatenate
  • cnn突破六(四层bpnet网络公式)