Python的PIL库初步使用:转换色彩空间

@[]

简介

PIL,即Python图像处理库(Python Imaging Library),conda默认环境便已提供,如果没有,可通过pip安装

pip install pillow

有了PIL,就可以对文件进行读取和存储,示例如下

from PIL import Image
path = 'lena.jpg'
img = Image.open(path)  # 读取
img.save('test.png')    # 存储

【Image.open】可以打开一个图像文件,并返回一个Image对象,在调用这个图像中的【save】方法,就能把图像存储到硬盘里。在存储文件时,其保存的文件类型由文件后缀决定,所以一读一存,便完成了数据格式的转换。

PIL支持常见的bmp, jpg, png, gif等诸多图像格式,以及大量我没见过的图像格式,具体可查看【PIL支持的文件格式】。

色彩模式

Image中封装了大量属性和函数,其常用属性如下

img.filename    # 图像的完整路径
img.format      # 图像格式, 'JPEG'
img.mode        # 色彩模式, 'RGB'
img.palette     # 调色板,RGB模式不需要调色板,所以无返回
img.size        # 图像尺寸  (512, 512)
# 此外,width和height分别表示图像宽、高

值得一提的是色彩模式【mode】,RGB表示红、绿、蓝三个通道。PIL提供的色彩模式如下表所示

位数类别
12黑白图像
L8灰度
P8彩图,颜色由palette进行映射
RGB8×3红绿蓝
RGBA8×4RGB+A,A是透明通道
CMYK8×4青品黄黑
YCbCr8×3亮度、蓝红
LAB8×3亮度、红绿色条、黄蓝色条
HSV8×3色相、饱和度、亮度
I32整数
F32浮点数

有了这个,就可以在存储图像时,将彩色图像转为黑白图像,代码如下

img.convert("L").save("gray.png")    # 存储

通道

上面的示例,通过【convert】函数,将RGB图像转换成了灰度图像,但具体是如何转换的,PIL并没有说明。在实际应用中,我们希望提取出图像中某种颜色的分量,比如绿色,那么久需要提取出图像的某一个通道,如下例所示。

green = img.getchannel("G")
green.save("green.png")    # 存储
img.convert("LAB").getchannel("A").save("A.png")    # 存储

【getchannel】即可实现提取某一通道,但这个函数仅适用于RGB或者RGBA格式的图像。

P模式

P模式就是调色板模式。在RGB图像中,每个像素要用R,G,B三组数据来描述,需要占据24位,而其能够描述的色彩数共有16777216中。而事实上,一张 1920 ∗ 1024 1920*1024 19201024的壁纸,也不过只有1966080个像素点,换言之,这张图像并不能用完RGB中所有的色彩。

为了让图像更小,可以将图像中现有的色彩按照序列排布,将每一组RGB和一个编号对应。那么,在像素中,就可以用色彩编号来取代RGB三元组,此色彩编号,即为调色板。可以预想,随着颜色数目的下降,图像色彩也会有不同程度的失真,效果如下

在这里插入图片描述

代码示例如下

img.convert("P").save("lena.gif")
img.quantize(16).save("p16.gif")

【quantize】函数,可以在转换为调色盘格式时,指定色彩数目。

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

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

相关文章

画质修复怎么调?一键将模糊图片变高清的窍门分享

就是说有同样拿起手机拍照就手抖的朋友吗? 小编每次都是因为手抖,拍出来的每一张照片都是虚焦糊糊的,几乎每一张!! 防抖功能都抵挡不住的虚焦,只能寄希望于各种图片画质修复清晰app来拯救这些糊糊的图片了…

智融SW2505 PD控制器 DRC 双向IC

1. 概述 SW2505 是一款高度集成的 PD 控制器。它符合的 USB Type-C 和 PD 3.1 标准,并支持 BC1.2 和最流行的高压快速充电协议,带有 DPDM 接口。它的目标是笔记本电脑、加密狗、显示器、移动电源和电源适配器。SW2505 集成了一个 32 位、高达 40MHz 的 …

Python数据分析-移动设备使用情况和用户行为分析

一、研究背景 在信息化飞速发展的今天,移动设备已成为人们生活和工作中的必备工具。智能手机普及率持续增长,用户使用行为不断增多,从娱乐、社交到办公、学习,手机的使用已渗透到各个年龄段和社会群体。移动设备使用情况的多样化…

vue-echarts使用

vue-echarts使用 排名柱状图示例代码 汇总示例代码 平均时效示例代码 全图 排名柱状图 示例 代码 // 排名趋势<!-- 排名数据趋势图 --><div class"rank"><div class"rank_title"><div class"rank_title_left"><spa…

华为云企业门户EWP SSL证书安装指南

一、申请 SSL 证书 在华测 Ctimall 网站&#xff08;SSL证书_域名ssl证书 - CTI华测检测官方商城&#xff09;申请 SSL 证书后&#xff0c;您将会收到一个压缩文件。该压缩文件包含四种证书格式&#xff0c;分别为&#xff1a;Tomcat、Nginx、IIS、Apache。其中&#xff0c;在 …

Docker 部署MongoDb

1. 编写docker-compose.conf 文件 version: 3 services:mongo:image: mongo:latest # 指定 MongoDB 版本&#xff0c;确保 > 3.6container_name: mongo-replicarestart: alwayscommand: ["mongod", "--replSet", "rs0", "--oplogSize&…

告别局域网限制:宝塔FTP结合内网穿透工具实现远程高效文件传输

文章目录 前言1. Linux安装Cpolar2. 创建FTP公网地址3. 宝塔FTP服务设置4. FTP服务远程连接小结 5. 固定FTP公网地址6. 固定FTP地址连接 前言 本文主要介绍宝塔FTP文件传输服务如何搭配内网穿透工具&#xff0c;实现随时随地远程连接局域网环境搭建的宝塔FTP文件服务并进行文件…

Qt/C++地图雷达扫描/动态扇形区域/标记线实时移动/轮船货轮动态轨迹/雷达模拟/跟随地图缩放

一、前言说明 地图雷达扫描的需求场景也不少&#xff0c;很多人的做法是直接搞个覆盖层widget&#xff0c;在widget上绘制雷达&#xff0c;优缺点很明显&#xff0c;优点是性能高&#xff0c;毕竟直接在widget上绘制性能明显比js中绘制要高&#xff0c;缺点是要么动态计算经纬…

Springboot集成阿里云通义千问(灵积模型)

我这里集成后&#xff0c;做成了一个工具jar包&#xff0c;如果有不同方式的&#xff0c;欢迎大家讨论&#xff0c;共同进步。 集成限制&#xff1a; 1、灵积模型有QPM(QPS)限制&#xff0c;每个模型不一样&#xff0c;需要根据每个模型适配 集成开发思路&#xff1a; 因有…

【CSS】入门详解

你是否曾经浏览网页时&#xff0c;被一些网站精美的布局、炫酷的动画和赏心悦目的色彩所吸引&#xff1f;这背后神奇的力量就是 CSS&#xff08;层叠样式表&#xff09;。CSS 就像网页的化妆师&#xff0c;它负责网页的样式和布局&#xff0c;让原本枯燥的 HTML 结构变得生动有…

【论文分享】HashGAT-VCA:一种结合哈希函数和图注意力网络的矢量元胞自动机模型,用于城市土地利用变化模拟

本文考虑地块内部异质性&#xff0c;提出一个结合哈希函数和图注意力网络&#xff08;GAT&#xff09;的矢量元胞自动机&#xff08;VCA&#xff09;方法&#xff0c;用于研究城市土地利用变化&#xff1b;并将该模型应用于模拟深圳市2009年至2012年的城市土地利用变化&#xf…

二十、Innodb底层原理与Mysql日志机制深入剖析

文章目录 一、MySQL的内部组件结构1、Server层1.1、连接器1.2、查询缓存1.3、分析器1.4、优化器1.5、执行器 2、存储引擎层 二、Innodb底层原理与Mysql日志机制1、redo log重做日志关键参数2、binlog二进制归档日志2.1、binlog日志文件恢复数据 3、undo log回滚日志4、错误日志…

安全芯片 OPTIGA TRUST M 使用介绍与示例(基于STM32裸机)

文章目录 目的资料索引硬件电路软件框架介绍数据存储框架移植框架使用 使用示例示例地址与硬件连接通讯测试功能测试 总结 目的 OPTIGA TRUST M 是英飞凌推出的安全芯片&#xff0c;芯片通提供了很多 slot &#xff0c;用于存放各类安全证书、密钥、用户数据等&#xff0c;内置…

10. NSTableView Table 数据表格

表格是非常重要和复杂的一个控件&#xff0c;本节会用大量篇幅来把表格这东西力求讲清楚。 基本设置 表格结构 表格是 OS X 组件中为数不多采用了MVC设计模式来实现的控件&#xff0c;即tableView–dataSource–Delegate&#xff0c;这种分层架构给处理数据带来了极大的便利…

控制流与循环:掌握程序的基本控制(2/10)

目录 控制流与循环&#xff1a;掌握程序的基本控制&#xff08;2/10&#xff09; 介绍 条件语句 基本用法 示例&#xff1a;判断用户输入的数字 条件语句中的逻辑运算符 示例&#xff1a;判断年龄阶段 循环结构 for 循环 示例 1&#xff1a;遍历列表 示例 2&#xf…

Python酷库之旅-第三方库Pandas(173)

目录 一、用法精讲 796、pandas.Float32Dtype类 796-1、语法 796-2、参数 796-3、功能 796-4、返回值 796-5、说明 796-6、用法 796-6-1、数据准备 796-6-2、代码示例 796-6-3、结果输出 797、pandas.Float64Dtype类 797-1、语法 797-2、参数 797-3、功能 797-…

linux查看系统架构的命令

两种方式&#xff0c;以下以中标麒麟为示例&#xff1a; 1.cat /proc/verison Linux version 3.10.0-862.ns7_4.016.mips64el mips64el即为架构 2.uname -a 输出所有内容 Linux infosec 3.10.0-862.ns7_4.016.mips64el #1 SMP PREEMPT Mon Sep 17 16:06:31 CST 2018 mips64el…

第J8周:Inception v1算法实战与解析

>- **&#x1f368; 本文为[&#x1f517;365天深度学习训练营]中的学习记录博客** >- **&#x1f356; 原作者&#xff1a;[K同学啊]** &#x1f4cc; 本周任务&#xff1a; 1了解并学习图2中的卷积层运算量的计算过程&#xff08;&#x1f3d0;储备知识->卷积层运算…

内网穿透之网络层ICMP隧道

免责申明 本文仅是用于学习检测自己搭建的靶场环境有关ICMP隧道原理和攻击实验,请勿用在非法途径上,若将其用于非法目的,所造成的一切后果由您自行承担,产生的一切风险和后果与笔者无关;本文开始前请认真详细学习《‌中华人民共和国网络安全法》‌及其所在国家地区相关法规…

提升网站流量和自然排名的SEO基本知识与策略分析

内容概要 在当今数字化时代&#xff0c;SEO&#xff08;搜索引擎优化&#xff09;成为加强网站可见度和提升流量的重要工具。SEO的基础知识包括理解搜索引擎的工作原理&#xff0c;以及如何通过优化网站内容和结构来提高自然排名。白帽SEO和黑帽SEO代表了两种截然不同的策略&a…