探索PIL库:Python图像处理的强大工具

文章一览

  • 前言
  • 一、PIL图像处理库简介
  • 二、基本概念
    • 2.1颜色模型
      • 2.1.1 RGB 颜色模型
      • 2.1.2 CMY色彩空间
    • 2.2 通道
    • 2.3 图像数据
    • 2.4 模式
  • 三、用PIL做图像处理
    • 3.1 图像缩放、翻转等处理
      • 3.1.1 图像缩放处理
      • 3.1.2 图像旋转处理
        • (1)PIL 提供的函数:
        • (2)利用numpy数组处理
    • 3.2 调整亮度
    • 3.3 图像高度裁剪
    • 3.4 图像过滤
    • 3.5图像增强

前言

在这个视觉至上的时代,图像已成为我们日常生活中不可或缺的一部分。无论是社交媒体上的分享,还是专业领域的图像分析,图像处理技术都扮演着至关重要的角色。但你是否曾想过,如何将这些静态的图像转化为动态的故事,或者从海量的图像数据中提取出有价值的信息?这正是Python图像处理库——PIL(Python Imaging Library)的神奇之处。

欢迎进入PIL的世界,这里是创意与技术的交汇点。

PIL库不仅仅是一个工具集,它是一个强大的盟友,帮助你解锁图像处理的无限可能。从基本的图像编辑到复杂的图像分析,PIL库以其简洁的API和强大的功能,让图像处理变得轻松而高效。无论是调整图片大小、应用滤镜效果,还是进行图像识别和机器学习,PIL库都能助你一臂之力。

随着我们深入探索PIL库的奥秘,你将发现,它不仅能够增强你的图像处理能力,还能够激发你的创造力,让你在图像的世界里自由翱翔。让我们一起揭开PIL库的神秘面纱,开启一段图像处理的奇妙旅程吧!

一、PIL图像处理库简介

Python 中有关图像处理的库有很多,常见的有 PIL、cv2 等。在进行深度学习图像任务的时候,常常会使用 PIL 这个库来读取和处理图片

PIL(Python Imaging Library)库是一个具有强大图像处理能力的第三方库,包含了丰富的像素、色彩等操作功能。

PIL 库支持图像存储、显示和处理,它能够处理几乎所有图片格式,可以完成对图像的缩放、裁剪、旋转、滤镜、叠加以及向图像添加线条、图像和文字等操作。

安装:

在命令行模式下:pip install pillow

pip 如果版本低,可升级更新:python -m pip install --upgrade pip

根据功能不同,PIL 库共包括 21 个与图片相关的类,这些类可以被看作是子库或 PIL 库中的模块

Image、ImageChops、ImageColor、ImageCrackCode、Image Enhance、ImageDraw ImageFile、ImageFileIO、ImageFilter、Image Font、ImageGL、ImageGrab、Imagemath、ImageOps、ImagePalette、ImagePath、ImageQt、ImageSequence、ImageStat、ImageTk、ImageWin

Image 是 PIL 中最重要的模块

from PIL import Image

二、基本概念

PIL 中所涉及的基本概念有如下几个:颜色模型通道模式尺寸

2.1颜色模型

2.1.1 RGB 颜色模型

组成:红®、绿(G)、蓝(B),每个点三个分量(R,G,B)

通常可以将 r、g、b 分别规整化为【0,1】,当使用 8 bit进行存储时,r、g、b通常取值为 [0,255] 内的整数

2.1.2 CMY色彩空间

CMY 是不同于 RGB 的另外一组基本色彩:Cyan(青)、Magenta(品红)、Yellow(黄),分别是 R、G、B 的补色

比如:青 = 1 - 红色,品红 = 1- 绿色。CMY 称为“减色系统”,而 RGB 称为“加色系统

RGB ——(0,0,0)为黑,(1,1,1)为白;值越大,颜色越亮

CMY ——(0,0,0)为白,(1,1,1)为黑,值越大,颜色越暗

2.2 通道

一幅彩色图像包括三个通道:Red 通道,Green 通道和 Blue 通道

在图像空间显示出来就是三张图片叠加起来,每张图片对应一个通道。而对于黑白图像,则只有 1 个通道

在这里插入图片描述

这张彩色图像是如何存储的?

在图像空间显示出来就是三张图片叠加起来,每张图片对应一个通道

2.3 图像数据

#导入相应的模块
import numpy as np
import matplotlib.pyplot as plt
# 随机生成 300x400 的多维数组
img = np.random.random([300,400])
plt.imshow(img)
plt.show()

图像的像素值可以用矩阵来表示,是一个由像素组成的二维矩阵,每个元素是一个 RGB

图像数据可以转换成 NumPy 中的数组元素

imshow() 功能:将数据显示为图像

  • X:numpy 数组或 PIL 图像
  • cmap:此参数是颜色图实例或注册的颜色图名称

2.4 模式

图像的 模式 定义了图像的类型和像素的位宽。当前支持如下模式:

(1)1:1 位像素,表示黑和白,但是存储的时候每个像素存储为 8 bit

(2)L:8 位像素,表示黑和白

(3)P:8 位像素,使用调色板映射到其他模式

(4)RGB:3x8位像素,为真彩色

(5)RGBA:4x8 位像素,有透明通道的真彩色

(6)CMYK:4x8 位像素,颜色分离(出版图像)

三、用PIL做图像处理

图像是一个由像素组成的二维矩阵,每个元素是一个 RGB 值:

  • Image.open ():打开图像
  • image.show():显示图像
  • image.save(<文件名>):保存图像
  • np.array():将图像转化为数组
  • plt. imshow() :将数组显示为图像

注意: plt. imshow() 和 plt.show() 同时出现才能显示图像

import numpy as np
from PIL import Image
image = Image.open('cat.png')
image.show()
im = np.array (image)
print ('shape:',im.shape)

208 × 338 × 3: 3 代表通道信息

图像数据是多维数组,前两维表示了图像的 高(行)、宽(列),第三维表示图像通道的个数。如果是黑白图像,默认1个通道

import numpy as np
from PIL import Image
image = Image.open('cat.png')
image = np.array (image)
print (image)
print ('shape:',image.shape)
print ('dtype:',image.dtype)

结果:

shape: (460, 724, 4)
dtype: uint8

查看数据形状,其形状是 [H, W, 3]

uint8,无符号整型。表示范围是 [0, 255] 的整数,像素范围是 [0,255],也可以归一化到 [0,1]

用 PIL 获取图片 RGB 数值

# 用 PIL 获取图片 RGB 数值
from PIL import Image
im = Image.open('cat.png')
width = im.size[0]
height = im.size[1]
array = []
for x in range(5):for y in range(5):r, g, b = im.getpixel((x,y))rgb = (r, g, b)array.append(rgb)
print(array)

黑白图像

import numpy as np
from PIL import Image
image = Image.open('cat1.png')
image.show()
im = np.array (image)
print ('shape:',im.shape)

结果:shape(208, 338)

如果是黑白图像,默认1个通道

3.1 图像缩放、翻转等处理

from PIL import Image
im = Image.open ('cat.png')
im.show ()

图像可以进行缩放、翻转等操作

3.1.1 图像缩放处理

两种方法:

  • 1、PIL 提供的函数;
  • 2、因为图像数据本质上就是 numpy 数组,因此可以通过对数组数据进行处理(比如切片操作)就可以实现对图像的处理
from PIL import Image
img = Image.open('cat.png')
img = img.resize((104,169))
img.show()

from PIL import Image
import numpy as np
import matplotlib.pyplot as plt
img = Image.open('cat.png')
img = np.array(img)
img = img[0:120,100:250]
plt.imshow(img)
plt.show()

3.1.2 图像旋转处理

对图像做旋转处理有两种方法:

(1)PIL 提供的函数:
import numpy as np
from PIL import Image
import matplotlib.pyplot as plt
img = Image.open('cat.png')
img = img.rotate(45)
img.show()

(2)利用numpy数组处理

因为图像数据本质上就是 numpy 数组,因此可以通过对数组数据进行处理(比如切片操作)就可以实现对图像的处理

上下翻转

import numpy as np
from PIL import Image
import matplotlib.pyplot as plt
img = Image.open('cat.png')
image = np.array (img)
image = image[::-1, :, :]
plt.imshow(image)
plt.show()

左右翻转

import numpy as np
from PIL import Image
import matplotlib.pyplot as plt
image = Image.open('体育馆.png')
plt.imshow(image)
plt.show()

image = Image.open('体育馆.png')
image1 = np.array (image)
image2 = image1[:, ::-1, :]
plt.imshow(image2)
plt.show()

3.2 调整亮度

image = Image.open('cat.png')
image = np.array (image)
image1 = image * 0.5
image1 = np.clip(image1,a_min=20, a_max=200.)
plt.imshow(image1.astype('uint8'))
plt.show()

np.clip(a, a_min, a_max):这个函数将数组中的元素限制在 a_min, a_max 之间,大于 a_max 的就使得它等于 a_max,小于 a_min,的就使得它等于 a_min

3.3 图像高度裁剪

image = Image.open('cat.png')
image = np.array (image)
H,W = image.shape[0],image.shape[1]
H1 = H // 2 
H2 = H
image = image[H1:H2, ::]
plt.imshow(image)
plt.show()

Image 的坐标好像是从左上开始的,0在左上

/ 是除法,例如:2/3 = 0.6666。而 // 是表示向下取整的除法,如 3 // 2 = 1,6.0 // 4 = 1

像素只能是整数,所以采用 // 除法

PIL库的 ImageEnhanceImageFilter 模块提供了过滤图像增强图像的方法

3.4 图像过滤

ImageFilter 类的预定义过滤方法

方法表示描述
ImageFilter.BLUR图像的模糊效果
ImageFilter.CONTOUR图像的轮廓效果
ImageFilter.EDGE_ENHANCE图像的边界加强效果
ImageFilter.DETAIL图像的细节效果
ImageFilter.EMBOSS图像的浮雕效果
ImageFilter.SMOOTH图像的平滑效果
ImageFilter.SHARPEN图像的锐化效果

图像模糊效果

import matplotlib.pyplot as plt
from PIL import Image, ImageFilter
im = Image.open('qe.png')
im = im.filter(ImageFilter.BLUR)
im.show()

图像轮廓效果

import matplotlib.pyplot as plt
from PIL import Image, ImageFilter
im = Image.open('qe.png')
conF = im.filter(ImageFilter.CONTOUR)
conF.show()

3.5图像增强

ImageEnhance 类提供了更高级的图像增强功能,如调整色彩度、亮度、对比度、锐化等

方法表示描述
ImageEnhance.enhance(factor)对选择属性的数值增强factor倍
ImageEnhance.Color(im)调整图像的颜色平衡
ImageEnhance.Contrast(im)调整图像的对比度
ImageEnhance.Brightness(im)调整图像的亮度
ImageEnhance.Sharpness(im)调整图像的锐度

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/64481.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

微信V3支付报错 平台证书及平台证书序列号

1.平台证书及平台证书序列号设置错误报错&#xff1a; 错误1&#xff1a; Verify the response’s data with: timestamp1735184656, noncea5806b8cabc923299f8db1a174f3a4d0, signatureFZ5FgD/jtt4J99GKssKWKA/0buBSOAbWcu6H52l2UqqaJKvrsNxvodB569ZFz5G3fbassOQcSh5BFq6hvE…

【Python科研数据爬虫】基于国家标准查询平台和能源标准化信息平台的海上风电相关行业标准查询信息爬取及处理

基于国家标准查询平台和能源标准化信息平台的海上风电相关行业标准查询信息爬取及处理 1 背景2 标准检索平台2.1 能源标准化信息平台2.2 全国标准信息公共服务平台3 标准信息数据的爬取与处理3.1 能源标准化信息平台的信息爬取3.2 全国标准信息公共服务平台的信息爬取3.3 标准信…

AWS Certified AI Practitioner 自学考试心得

学习目标&#xff1a; 考取 AWS Certified AI Practitioner 那什么是 AWS Certified AI Practitioner 认证 是基础级的认证 比较简单 — 学习内容&#xff1a; 1. AWS网站自学网站 极客时间免费课程&#xff1a;http://gk.link/a/12sJL 配合极客时间课程的章节测试检验自…

Ngnix介绍、安装、实战及用法!!!

一、Nginx简介 1、Nginx概述 Nginx (“engine x”) 是一个高性能的 HTTP 和 反向代理服务器&#xff0c;特点是占有内存少&#xff0c;并发能力强&#xff0c;能经受高负载的考验,有报告表明能支持高达 50,000 个并发连接数 。 2、正向代理 正向代理&#xff1a;如果把局…

05.HTTPS的实现原理-HTTPS的握手流程(TLS1.2)

05.HTTPS的实现原理-HTTPS的握手流程&#xff08;TLS1.2&#xff09; 简介1. TLS握手过程概述2. TLS握手过程细化3. 主密钥&#xff08;对称密钥&#xff09;生成过程4. 密码规范变更 简介 主要讲述了混合加密流程完成后&#xff0c;客户端和服务器如何共同获得相同的对称密钥…

YOLO11全解析:从原理到实战,全流程体验下一代目标检测

前言 一、模型介绍 二、网络结构 1.主干网络&#xff08;Backbone&#xff09; 2.颈部网络&#xff08;Neck&#xff09; 3.头部网络&#xff08;Head&#xff09; 三、算法改进 1.增强的特征提取 2.优化的效率和速度 3.更高的准确性与更少的参数 4.环境适应性强 5.…

Jenkins 构建流水线

在 Linux 系统上安装 Jenkins 服务&#xff0c;以及配置自动化构建项目 前置准备环境&#xff1a;docker、docker-compose、jdk、maven 一、环境搭建 1. Jenkins 安装 &#xff08;1&#xff09;拉取镜像 # 安装镜像包&#xff0c;默认安装最新版本 docker pull jenkins/jen…

【Java】面试题 并发安全 (1)

文章目录 synchronized1. 基本概念与作用2. 使用方式3. 底层原理&#xff08;基于monitor&#xff09;4. 面试题回答要点5. 注意事项与进阶理解 Java中synchronized锁相关知识总结Java内存模型&#xff08;JMM&#xff09;CAS概述及重要性volatile关键字AQS简介 synchronized …

前端项目 npm报错解决记录

1.首先尝试解决思路 npm报错就切换yarn &#xff0c; yarn报错就先切换npm删除 node_modules 跟 package-lock.json文件重新下载依 2. 报错信息&#xff1a; Module build failed: Error: Missing binding D:\vue-element-admin\node_modules\node-sass\vendor\win32-x64-8…

深度学习中batch_size

Batch size调整和epoch/iteration的关系 训练数据集总共有1000个样本。若batch_size10&#xff0c;那么训练完全体样本集需要100次迭代&#xff0c;1次epoch。 训练样本10000条&#xff0c;batchsize设置为20&#xff0c;将所有的训练样本在同一个模型中训练5遍&#xff0c;则…

评分模型在路网通勤习惯分析中的应用——提出问题(1)

1、问题的由来、目标和意义 最近一段时间和公司其它业务部门讨论时&#xff0c;发现一个有趣的交通路网问题&#xff0c;车辆从S点行驶到V点共用时40分钟&#xff0c;这段时间内路网中的卡口摄像头识别到了车辆通过的信息。如下图所示&#xff1a; 设计师需要通过这些有限的路…

MS SQL Server 实战 排查多列之间的值是否重复

目录 需求 范例运行环境 数据样本设计 功能实现 上传EXCEL文件到数据库 SQL语句 小结 需求 在日常的应用中&#xff0c;排查列重复记录是经常遇到的一个问题&#xff0c;但某些需求下&#xff0c;需要我们排查一组列之间是否有重复值的情况。比如我们有一组题库数据&am…

抖去推碰一碰系统技术源码/open SDK转发技术开发

抖去推碰一碰系统技术源码/open SDK转发技术开发 碰一碰智能系统#碰碰卡系统#碰一碰系统#碰一碰系统技术源头开发 碰碰卡智能营销系统开发是一种集成了人工智能和NFC技术的工具&#xff0c;碰碰卡智能营销系统通过整合数据分析、客户关系管理、自动化营销活动、多渠道整合和个…

WEB攻防-通用漏洞-文件上传-js验证-MIME验证-user.ini-语言特征

目录 定义 1.前端验证 2.MIME验证 3.htaccess文件和.user. ini 4.对内容进行了过滤&#xff0c;做了内容检测 5.[ ]符号过滤 6.内容检测php [] {} ; 7.()也被过滤了 8.反引号也被过滤 9.文件头检测 定义 文件上传漏洞是指攻击者上传了一个可执行文件&#xff08;如木马…

未来网络技术的新征程:5G、物联网与边缘计算(10/10)

一、5G 网络&#xff1a;引领未来通信新潮流 &#xff08;一&#xff09;5G 网络的特点 高速率&#xff1a;5G 依托良好技术架构&#xff0c;提供更高的网络速度&#xff0c;峰值要求不低于 20Gb/s&#xff0c;下载速度最高达 10Gbps。相比 4G 网络&#xff0c;5G 的基站速度…

SuperMap iClient3D for Cesium等高线标注

kele 前言 在三维地形分析中&#xff0c;等高线分析是一种非常重要的分析方法&#xff0c;它能直观的表达出地形的高低起伏特征&#xff0c;在三维系统中受到广泛应用。在SuperMap iClient3D for Cesium中&#xff0c;等高线分析是前端GPU分析&#xff0c;能够分析并渲染出等高…

从 x86 到 ARM64:CPU 架构的进化与未来

在计算机发展的历史长河中&#xff0c;x86、x64 和 ARM64 这三大主流 CPU 架构各自书写了辉煌的篇章。它们不仅代表了技术的进步&#xff0c;更承载着无数创新者的梦想与努力。 x86&#xff1a;从 16 位到 32 位的辉煌之路 诞生与崛起 1978 年&#xff0c;英特尔&#xff08;…

红魔电竞PadPro平板解BL+ROOT权限-KernelSU+LSPosed框架支持

红魔Padpro设备目前官方未开放解锁BL&#xff0c;也阉割了很多解锁BL指令&#xff0c;造成大家都不能自主玩机。此规则从红魔8开始&#xff0c;就一直延续下来&#xff0c;后续的机型大概率也是一样的情况。好在依旧有开发者进行适配研究&#xff0c;目前红魔PadPro平板&#x…

TCP Analysis Flags 之 TCP Out-Of-Order

前言 默认情况下&#xff0c;Wireshark 的 TCP 解析器会跟踪每个 TCP 会话的状态&#xff0c;并在检测到问题或潜在问题时提供额外的信息。在第一次打开捕获文件时&#xff0c;会对每个 TCP 数据包进行一次分析&#xff0c;数据包按照它们在数据包列表中出现的顺序进行处理。可…

<数据集>风力发电机损伤识别数据集<目标检测>

数据集下载链接 &#xff1c;数据集&#xff1e;风力发电机损伤识别数据集&#xff1c;目标检测&#xff1e;https://download.csdn.net/download/qq_53332949/90187097数据集格式&#xff1a;VOCYOLO格式 图片数量&#xff1a;2527张 标注数量(xml文件个数)&#xff1a;252…