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 ImageEnhance

enhancer = 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 ImageFilter

img_blurred = img.filter(ImageFilter.BLUR)  # 模糊
img_sharpened = img.filter(ImageFilter.SHARPEN)  # 锐化

# 其他滤镜
img_filtered = img.filter(ImageFilter.CONTOUR)

六、绘图操作

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

from PIL import ImageDraw, ImageFont

draw = 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.size

for 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 ImageFilter

img_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 os

for 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.mfbz.cn/a/889188.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Python 如何使用 SQLAlchemy 进行复杂查询

Python 如何使用 SQLAlchemy 进行复杂查询 一、引言 SQLAlchemy 是 Python 生态系统中非常流行的数据库处理库&#xff0c;它提供了一种高效、简洁的方式与数据库进行交互。SQLAlchemy 是一个功能强大的数据库工具&#xff0c;支持结构化查询语言&#xff08;SQL&#xff09;…

Windows 通过 Docker 安装 GitLab

1. 安装 Docker Desktop 下载网站&#xff1a;Windows | Docker Docs 2. 拉取 GitLab Docker 镜像 打开 PowerShell 或 命令提示符&#xff0c;拉取 GitLab 镜像&#xff1a; docker pull gitlab/gitlab-ee:latest或则使用社区版&#xff1a; docker pull gitlab/gitlab-ce…

【C++】STL——stack和queue

目录 前言容器配接器&#xff08;适配器&#xff09;stack的使用stack的模拟实现queue的使用queue的模拟实现双端队列&#xff08;deque&#xff09; 前言 前面我们已经学习了STL容器中的string、vector还有list。 【C】string的模拟实现 【C】STL——vector的模拟实现 【C】S…

CTF-PWN方向 栈溢出等基础知识笔记(2)

ret2syscall 要求有0x80这种系统调用存在 &#xff08;0x0A是回车的意思&#xff09; 案例 通过file查看这个文件 发现是静态编译的文件 所以很多库函数都被编译进去了 但是不存在bin/sh字符串 不存在system和backdoor函数 系统调用需要用到的寄存器 通过ROPgadget工具来查找…

传统图像处理Opencv分割不同颜色的夹子

任务要求&#x1f349; 1. 计算图像中夹子的总数。 2. 分别计算不同颜色夹子的个数。 3. 使用以下方法适应三张图片&#xff0c;并在每张图像上显示结果&#xff1a; - 阈值方法 - HSV颜色空间 - 连通域分析 - 形态学图像处理 - Canny边缘检测 4. 在结果中显示计…

《数据密集型应用系统设计》笔记——第二部分 分布式数据系统(ch5-9)

第5章 数据复制 目的&#xff1a; 地理位置更近&#xff0c;降低延迟故障冗余提高读吞吐量 主节点与从节点&#xff08;主从复制&#xff09; 主从复制&#xff1a; 写请求发送给主节点&#xff0c;主节点将新数据写入本地存储&#xff1b;主节点将数据更改作为复制的日志发送…

使用java做一个微信机器人

微信机器人这个功能&#xff0c;目前在市面上运用的还是不是很多&#xff0c;每个人实现机器人的目的也不一样&#xff0c;有的为了自动加好友;有的为了自动拉群:也有的为了机器人对话聊天等等一系列。想必大家对微信机器人感兴趣的伙伴&#xff0c;但是大多数走到一半遇到各种…

Android Jetpack Compose中UI刷新的几种方式

Android Jetpack Compose中UI刷新的几种方式 在 Jetpack Compose 中,如果你想强制刷新 UI,可以使用 remember 和 mutableStateOf 来创建一个可观察的状态。当这个状态变化时,Compose 会自动重组 UI。以下是一些常见的方法来实现这一点: 1. 使用 mutableStateOf 你可以使…

[SQL] 安装

一 Windows 1.1 下载 进入Mysql的官方网站,点击下载->找到社区版本 选择对应操作系统进行下载。 点击下载 选择直接下载即可 1.2 安装 选择Full安装&#xff1a; MySQL服务器、客户端程序和其他附加工具如果只需要服务端那就选择Server only即可 点击执行,等待组件下载完…

【Unity踩坑】UWP项目安装包认证失败

问题&#xff1a;在Unity导出的VS项目&#xff0c;打包生成appx后&#xff0c;进行应用认证时失败。提示部分API不支持。 API __C_specific_handler in kernel32.dll is not supported for this application type. UnityPlayer.dll calls this API.API DXGIGetDebugInterface1 …

Windows 搭建 Gitea

一、准备工作 1. 安装 Git&#xff1a;Gitea 依赖 Git 进行代码管理&#xff0c;所以首先需要确保系统中安装了 Git。 下载地址&#xff1a;https://git-scm.com/downloads/win 2. 安装数据库&#xff08;可选&#xff09; 默认情况下&#xff0c;Gitea 使用 SQLite 作为内…

k8s部署学习

8s的架构 一个kubernetes集群主要是由控制节点(master)、工作节点(node)构成&#xff0c;每个节点上都会安装不同的组件 1 master&#xff1a;集群的控制平面&#xff0c;负责集群的决策 ApiServer : 资源操作的唯一入口&#xff0c;接收用户输入的命令&#xff0c;提供认证、…

【每天学点AI】大模型如何做情感分类?BERT是如何做情感分类的?

BERT是如何做情感分类的呢&#xff1f;今天&#xff0c;让我们一起揭开BERT模型的神秘面纱&#xff0c;看看它是如何巧妙地进行情感分类的&#xff01; BERT&#xff0c;作为一个双向编码器模型&#xff0c;它的独特之处在于能够全面吸收一段文本或句子的精髓。 通过tokenizer…

五款专业三维数据处理工具:GISBox、Cesiumlab、OSGBLab、灵易智模、倾斜伴侣深度解析

随着三维数据处理技术的广泛应用&#xff0c;尤其是在城市规划、地理信息系统&#xff08;GIS&#xff09;、工程监测等领域&#xff0c;处理倾斜摄影、三维建模以及大规模数据管理的需求日益增加。以下是五款我精心挑选的倾斜摄影和三维数据处理工具——GISBox、Cesiumlab、OS…

Kubernetes(K8s)的简介

一、Kubernetes的简介 1 应用部署方式演变 在部署应用程序的方式上&#xff0c;主要经历了三个阶段&#xff1a; 传统部署&#xff1a;互联网早期&#xff0c;会直接将应用程序部署在物理机上 优点&#xff1a;简单&#xff0c;不需要其它技术的参与 缺点&#xff1a;不能为应…

C语言预处理详解(下)(31)

文章目录 前言一、命令行定义二、条件编译三、文件包含头文件被包含的方式嵌套文件包含 总结 前言 再介绍几点吧&#xff01; 一、命令行定义 许多C 的编译器提供了一种能力&#xff0c;允许在命令行中定义符号。用于启动编译过程 当我们根据同一个源文件要编译出不同的一个程序…

太速科技-607-基于FMC的12收和12发的光纤子卡

基于FMC的12收和12发的光纤子卡 一、板卡概述 本卡是一个FPGA夹层卡&#xff08;FMC&#xff09;模块&#xff0c;可提供高达2个CXP模块接口&#xff0c;提供12路收&#xff0c;12路发的光纤通道。每个通道支持10Gbps,通过Aurora协议&#xff0c;可以组成X4&#xff0…

中间件介绍

可以把中间件想象成是在应用和系统之间搭建的一座桥梁&#xff0c;或者说是一个“翻译官”和“中转站”。它处在操作系统、网络和数据库之上&#xff0c;应用软件的下层&#xff0c;负责实现应用软件之间的互联互通&#xff0c;使得应用软件能够更方便、高效地进行数据交换和通…

2024最新CSDN Markdown编辑器语法教程

这里写自定义目录标题 欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题&#xff0c;有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants 创建一个自定义列表如何创建一个…

R语言中的plumber介绍

R语言中的plumber介绍 基本用法常用 API 方法1. GET 方法2. POST 方法3. 带路径参数的 GET 方法 使用 R 对数据进行操作处理 JSON 输入和输出运行 API 的其他选项其他功能 plumber 是个强大的 R 包&#xff0c;用于将 R 代码转换为 Web API&#xff0c;通过使用 plumber&#x…