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

第3章: 图像增强与色彩处理

在本章中,我们将探讨如何使用 Pillow 进行图像的增强和色彩处理。图像增强操作包括亮度、对比度、锐化等调整,而色彩处理涉及灰度转换、色调调整、通道操作等。


1.1 图像亮度调整

Pillow 提供了 ImageEnhance 模块,用于调节图像的亮度、对比度、颜色和锐度。亮度调整通过 ImageEnhance.Brightness 实现。

调整亮度

使用 Brightness 类创建增强对象,并调用 enhance() 方法传入亮度系数:

  • 系数为 1.0 表示原始亮度;
  • 大于 1.0 会增加亮度;
  • 小于 1.0 会降低亮度。
from PIL import Image, ImageEnhance# 打开图像
image = Image.open("example.jpg")# 创建亮度增强对象
enhancer = ImageEnhance.Brightness(image)# 调整亮度
brighter_image = enhancer.enhance(1.5)  # 增加亮度
brighter_image.show()darker_image = enhancer.enhance(0.5)  # 降低亮度
darker_image.show()

案例:批量调整文件夹内所有图像的亮度

import osinput_folder = "images/"
output_folder = "brightened_images/"
brightness_factor = 1.3if not os.path.exists(output_folder):os.makedirs(output_folder)for filename in os.listdir(input_folder):if filename.endswith(".jpg") or filename.endswith(".png"):image = Image.open(os.path.join(input_folder, filename))# 增加亮度enhancer = ImageEnhance.Brightness(image)brightened_image = enhancer.enhance(brightness_factor)# 保存调整后的图像brightened_image.save(os.path.join(output_folder, filename))print(f"{filename} 亮度调整完成")

1.2 图像对比度调整

对比度调整可以增加图像的明暗差异,使图像显得更加清晰。使用 ImageEnhance.Contrast 类实现对比度增强。

调整对比度

对比度增强与亮度增强的操作类似:

  • 系数为 1.0 表示原始对比度;
  • 大于 1.0 会增加对比度;
  • 小于 1.0 会降低对比度。
# 创建对比度增强对象
enhancer = ImageEnhance.Contrast(image)# 增加对比度
high_contrast_image = enhancer.enhance(1.5)
high_contrast_image.show()# 降低对比度
low_contrast_image = enhancer.enhance(0.8)
low_contrast_image.show()

1.3 图像颜色增强

颜色增强可以调整图像的色彩饱和度,从而改变图像的色彩效果。使用 ImageEnhance.Color 类实现。

调整色彩
  • 系数为 1.0 表示原始色彩;
  • 大于 1.0 会增加饱和度;
  • 小于 1.0 会降低饱和度,趋向于黑白。
# 创建颜色增强对象
enhancer = ImageEnhance.Color(image)# 增加色彩饱和度
high_color_image = enhancer.enhance(1.8)
high_color_image.show()# 降低色彩饱和度
low_color_image = enhancer.enhance(0.3)
low_color_image.show()

1.4 图像锐化

图像锐化可以增加图像边缘的清晰度,使细节更加突出。使用 ImageEnhance.Sharpness 类来实现图像锐化。

调整锐度
  • 系数为 1.0 表示原始锐度;
  • 大于 1.0 会增加锐度;
  • 小于 1.0 会使图像变得模糊。
# 创建锐化增强对象
enhancer = ImageEnhance.Sharpness(image)# 增加锐度
sharp_image = enhancer.enhance(2.0)
sharp_image.show()# 降低锐度
blurred_image = enhancer.enhance(0.5)
blurred_image.show()

1.5 灰度处理

将彩色图像转换为灰度图像,可以使图像失去色彩信息,仅保留亮度信息。灰度处理通常用于机器学习预处理和图像分析。

使用 convert() 方法转换为灰度图像

将图像模式设置为 L,可以将彩色图像转换为灰度图像。

# 转换为灰度图像
gray_image = image.convert("L")
gray_image.show()

案例:批量将文件夹内所有图像转换为灰度图像

input_folder = "images/"
output_folder = "gray_images/"if not os.path.exists(output_folder):os.makedirs(output_folder)for filename in os.listdir(input_folder):if filename.endswith(".jpg") or filename.endswith(".png"):image = Image.open(os.path.join(input_folder, filename))# 转换为灰度图像gray_image = image.convert("L")# 保存灰度图像gray_image.save(os.path.join(output_folder, filename))print(f"{filename} 转换为灰度图像完成")

1.6 色彩通道操作

Pillow 提供了对图像中各个颜色通道(红色、绿色、蓝色)进行独立操作的功能。通过 split() 方法,可以分离图像的 RGB 通道,并对每个通道进行单独处理。

分离与合并通道

使用 split() 方法将图像分离为三个独立的通道,分别对应 R、G、B。然后可以对单个通道进行处理,并通过 merge() 方法将其重新合并为一张图像。

# 分离通道
r, g, b = image.split()# 对红色通道进行处理(如提高亮度)
r = r.point(lambda i: i * 1.2)# 合并通道
enhanced_image = Image.merge("RGB", (r, g, b))
enhanced_image.show()

案例:将图像的红色通道增强,使整体色调偏红

r, g, b = image.split()# 增强红色通道
r = r.point(lambda i: i * 1.5)# 合并图像
red_enhanced_image = Image.merge("RGB", (r, g, b))
red_enhanced_image.show()

1.7 色彩反转与阈值处理

色彩反转和阈值处理是常见的色彩操作。色彩反转可以生成负片效果,而阈值处理则可以生成黑白效果。

色彩反转

使用 ImageOps.invert() 可以对图像的每个像素进行反转操作。需要将图像转换为 RGB 模式才能应用此操作。

from PIL import ImageOps# 转换为 RGB 模式
rgb_image = image.convert("RGB")# 反转色彩
inverted_image = ImageOps.invert(rgb_image)
inverted_image.show()
阈值处理

阈值处理可以将图像转换为黑白图像,根据指定的阈值决定像素是变为黑色还是白色。

# 转换为灰度图像
gray_image = image.convert("L")# 应用阈值处理
threshold = 128
binary_image = gray_image.point(lambda x: 255 if x > threshold else 0, "1")
binary_image.show()

案例:批量对文件夹内的所有灰度图像应用阈值处理

input_folder = "gray_images/"
output_folder = "binary_images/"
threshold = 128if not os.path.exists(output_folder):os.makedirs(output_folder)for filename in os.listdir(input_folder):if filename.endswith(".jpg") or filename.endswith(".png"):gray_image = Image.open(os.path.join(input_folder, filename)).convert("L")# 应用阈值处理binary_image = gray_image.point(lambda x: 255 if x > threshold else 0, "1")# 保存二值化图像binary_image.save(os.path.join(output_folder, filename))print(f"{filename} 阈值处理完成")

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

相关文章:

  • YOLOv7-0.1部分代码阅读笔记-test.py
  • 【Unity踩坑】Unity项目中的Ads不显示Game Id
  • 丑数动态规划
  • 新版Apache tomcat服务安装 Mac+Window双环境(笔记)
  • Thinkphp6视图介绍
  • 实现3D热力图
  • 基于HFSS软件的滤波器设计
  • 货拉拉四次冲刺业绩向好:净变现率下滑,司机大量投诉及权益保护仍亟待完善
  • spring-gateway网关聚合swagger实现多个服务接口切换
  • 【学习】【HTML】HTML、XML、XHTML
  • 运行springBlade项目历程
  • 论云游戏的性能与性价比,ToDesk、青椒云、顺网云游戏等具体实操看这篇就够了
  • 上海亚商投顾:沪指放量调整 全市场近3800只个股下跌
  • 关于我、重生到500年前凭借C语言改变世界科技vlog.18——内存函数
  • Rocky linux8 安装php8.0
  • CesiumJS 案例 P27:创建椭圆、创建带边框的椭圆、创建圆、创建带边框的圆、创建椭圆环、创建圆环
  • WPF 中的视觉层和逻辑层有什么区别?
  • frp搭建内网穿透
  • PMC部门如何精准把控生产计划和生产进度?关键要点全解析
  • 【miniMax开放平台-注册安全分析报告-无验证方式导致安全隐患】
  • day31-二叉树的最大深度
  • Git服务部署教程
  • Linux中扫描网络的“nmap”工具使用方法
  • Conda安装软件错误(Pycharm)
  • 【更新中】《硬件架构的艺术》笔记(二):时钟与复位
  • 使用Flask部署自己的pytorch模型(猫品种分类模型)