计算摄像技术02 - 颜色空间
一些计算摄像技术知识内容的整理:颜色视觉与感知特性、颜色空间和基于彩色滤镜阵列的彩色感知。
文章目录
一、颜色视觉与感知特性
(1)色调
(2)饱和度
(3)明度
二、颜色空间
(1)RGB 颜色空间
(2)HSV 颜色空间
(3)YCbCr 颜色空间
① RGB444
② RGB422
③ RGB411
④ RGB420
(4)CMY 颜色空间
三、基于彩色滤镜阵列的彩色感知
(1)Bayer 格式的 CFA 彩色滤镜阵列设计
一、颜色视觉与感知特性
人眼除了能够分辨可见光的明暗亮度以外,还能分辦颜色。一直以来,人眼如何分辨颜色的机理是最吸引研究者的研究领域之一。颜色是通过肉眼、大脑和人们的生活经验所产生的一种对光的视觉效应,对颜色的感觉不仅由光的物理性质決定,还包括人的心理等许多因素。
1802年,杨(Thomas Young)提出了三色学说。约半个世纪后亥姆霍兹 (Hermann von Helmholtz)对其进行了定量发展和完善。三色学说的核心观点是假定人眼视网膜上存在三种能够感受红、绿、蓝三原色的光接收器,每种接收器受到刺激后引起的兴奋响应都能产生一种原色的感觉,而颜色感受都由兴奋响应量的比例确定。需要注意的是三色学说不是理论推导的学说,而是建立在颜色混合实验规律的基础上,即不同比例的红、绿、蓝三原色可以混合出几乎所有的颜色。
颜色可分为彩色和非彩色两大类。
- 非彩色是指白色、黑色和介于黑白之间的各种深浅不同的灰色。非彩色只有描述白光亮度变化的明亮度的差异。
- 彩色是除了黑、白、灰以外的各种颜色。
不同的彩色通过三种特征属性描述:色调、饱和度、明度。
(1)色调
色调(hue)是视觉系统对物体呈现出的颜色的感觉,用红 (red)、橙 (orange)、黄 (yellow)、绿(green)、青 Coyan)、蓝(blue)、靛 (indigo)、紫 (violet)等术语刻画,黑、灰、白为无色彩。
不同波长的单色光具有不同的色调。发光物体的色调取决于其辐射光的光谱组成,非发光物体的色调则取决于照明光源的光谱组成和物体的反射(透射)光谱特性。可以总结为色调取决于可见光的光谱构成,它是颜色彼此区分的外观特性,与颜色明暗无关。色调数目由多达 1000 万种。
(2)饱和度
饱和度(saturation)是对颜色纯度的刻画。可见光光谱中的各种单色光是完全饱和的颜色。完全饱和的颜色是指没有渗入白光所呈现出的颜色,当一种颜色掺入其他光成分越多时,光谱带越宽,颜色越不饱和。反过来,光的光谱带越窄,颜色的饱和度就越高。
(3)明度
明度(brigbtness)是人眼感受物体明暗程度的描述,明度是视觉系统对可见物体辐射光或发射光多少的感知程度。
- 发光物体的亮度越高,明度就越高
- 非发光物体的反射比越高,明度也就越高
黑色(没有光)的明度最低,白色的明度最高,在这两个极端之间的是不同明度的灰色地带。
需要注意的是,明度是一个主观感觉值,无法用物理设备测量,但可以用亮度(即辐射的能量)来度量。根据国际照明委员会 (International Commission on TIlumination, CIE)的定义,亮度是用反映视觉特性的光谱敏感函数加权之后得到的辐射功率,并在555nm处达到峰值,它的幅度与物理功率成正比。但是,亮度虽然更容易度量,但它与明度并不是同一概念,它可以认为是光的强度,与明度的关系并不是简单的线性关系。
上图所示的三维空间的纺锤体,可以把色调、饱和度和明度这三个颜色的基本特征属性表示出来。
- 垂直轴代表从白到黑的颜色明度变化。
- 水平圆盘剖面的径向表示颜色饱和度变化。
- 从圆心向圆周画一条直线段,其上的色调和明度保持不变,但从内向外,饱和度越来越高。
- 水平圆盘剖面上的每个圆周用于表示具有相同饱和度和明度的连续变化的色调,最大半径的圆周表示的是可见光谱中完全饱和的单色光的各种不同色调。
实验证实,人的视觉系统能感受颜色,但不能感知和区分组成特定颜色刺激的光谱成分。只要是色度、饱和度和明度属性给人的感觉相同,视觉系统就认为这是同一种颜色,这就形成了同色异谱现象。
1854 年,格拉斯曼 (Grassmann)在大量混色实验的基础上,总结得到定性描述颜色混合规律的格拉斯曼定律。格拉斯曼定律是现代色度学的重要基础,共包括以下四条定律。
(1)人的视觉只能分辨颜色的三种变化,即色调、饱和度和明度。
(2)在由两种成分组成的混合色中,如果一种成分连续变化,混合色的外貌也连续变化。
(3)颜色外貌相同的光,不管它们的光谱组成是否相同,在颜色混合中具有相同的效果。
(4)混合色光的总亮度等于组成混合色的各种色光的亮度总和。
二、颜色空间
为了便于对颜色认知的交流,需要一些规定的方法量化精确表征各种颜色。颜色的定量表征涉及观察者的视觉生理和心理、照明与观察物理条件等诸多复杂因素。那么如何实现与人的颜色视觉特性一致的颜色量化表示技术,以满足对颜色特性定量化和标淮化的需要呢?
经过长期的探索实验,国际照明委员会在1931年提出了 CIE 1931标准色度系统,形成了RGB 颜色空间。此后,在此基础上,陆续提出了许多满足不同需求的颜色空间或颜色模型。
颜色空间是表示颜色的一种数学方法,用表示颜色的基本参数描述和记录颜色,通常用三维模型定义颜色空间,空间中的颜色用代表三个颜色属性参数的三个维度的坐标指定,这些三维参数描述颜色在颜色空间中的位置,但并没有明确是什么颜色,其颜色取决于使用的坐标。
定义颜色空间使用的属性参数根据颜色空间针对不同对象和应用目的的不同而变化多样。例如,对于人,可以通过色调、饱和度和明度定义颜色;对于CRT 显示设备,可以用红、绿和蓝磷光体的发光量定义颜色;对于打印或印刷设备,可以使用青色、品红色、黄色和黑色的反射和吸收指定颜色。
理论上,可定义表示颜色的颜色空间的数目是无穷的。颜色空间有设备相关颜色空间与设备无关颜色空间之分。设备相关的颜色空间是指生成的颜色与生成颜色的设备有关,最常见的RGB 颜色空间就是指与显示设备相关的颜色空间。计算机显示器用 RGB 显示颜色,用像素值 R=250、G=123、B=23 生成的颜色将随具体显示器的亮度和对比度的改变而改变。设备无关的颜色空间是指该颜色空问中与生成的颜色及生成颜色的设备无关。
(1)RGB 颜色空间
几乎所有的颜色空间都是从 RGB ( red, green, blue)颜色空间导出的。RGB 颜色空间利用红、绿和蓝三基色的不同比例相加合成产生各种不同的颜色。
R、G、B取值范围都是 0.0~1.0。在大部分 RGB 颜色空间应用中,R、G、B的取值常用8bit表示,因此代表三基色的红、绿、蓝通道分别用 0~255 的整数量表示强度。
0表示无光,最暗;255 表示强度最大,最亮。因为三种颜色都有 256 个亮度水平级,经叠加可形成 1670 万种颜色。对于人眼分辨颜色能力而言,通过 RGB 颜色空间足以再现绚丽的世界。
RGB 颜色空间是混合加色型颜色空间,在电视机和计算机的图像颜色显示系统中有广泛应用。例如,主要用在显示器、扫描仪等设备上。对于 CRT 显示器,R、G、B分别表示显示器红、绿、蓝三种荧光粉受到电子枪轰击后激励产生的颜色;对于扫描仪,R、G、B分别表示光电转换接收的通过红、绿、蓝滤光片的色彩。
RGB 颜色空间的优点是原理简单,使用 RGB 生成颜色容易实现。但缺点是 RGB 颜色空间是与设备相关的颜色空间,在RGB 颜色空间中,对颜色指定不够直观。在RGB 颜色空间中度量颜色时,视觉对颜色的感知是非线性的,R、G、B通道的相关性也比较强。
(2)HSV 颜色空间
HSV(hue, saturation, value)颜色空间是根据颜色的直观特性定义的,也被称为HSI颜色空间。在HSV 中,色调日用水平圆周上的角度度量,取值范围为 0°~360°。按逆时针方向计算,红色为 0°,绿色为 120°,蓝色为 240°,它们对应的补色色调取值分别为青色180°,品红色 300°,黄色 60°。
饱和度S用水平圆周的从圆心到边缘的径向表示,取值范围为 0.0~1.0。亮度值 V 自底向上,取值范围为 0.0~1.0,对应从黑色到白色。同样,在用8bit表示H、S、V通道的取值时,也把它们转换成 0~255 之间的整数。HSV 颜色空间属于强度、饱和度和色调型颜色空间,是面向计算机绘图时颜色编辑使用的较直观的颜色空间。HSV 是设各相关的颜色空间,其优点在于用色调和饱和度描述对色彩的感知,指定颜色的方式和对颜色的解释非常直观,而且对消除光亮度的影响很有用。
(3)YCbCr 颜色空间
YCbCr 颜色空间是在ITU-R BT.601 和 BT.709 等标准中明确定义的,是数字电视颜色空间,主要用于优化彩色视频信号的传输。其中,Y是亮度,由 RGB 输入信号的特定部分叠加得到:Cr、Cb 表示色度,用于描述颜色的色调和饱和度。其中,Cr反映RGB中红色部分与Y亮度值之间的差异,而Cb反映 RGB 中蓝色部分与Y亮度值之间的差异。YCrCb 颜色空间的重要性体现在亮度信号Y和色度信号Cr、Cb是分离的,如果只有Y分量而没有Cb、Cr分量,那么图像就是黑白灰度图像。如果 YCbCr 取值用8比特表示,Y的取值范围为 16~235,16 表示黑电平,235 表示白电平,Cb、Cr的取值范围为 16~240,使用128 的偏移时范围为-112~112。
因为人眼对区域内色差的变化没有对灰度的变化敏感。在图像质量损失忽略不计的前提下,可以降低Cb、Cr 通道的采样率,从而有效压缩 Cb、Cr通道的数据量。常见的 YCbCr采样频率格式包括 4:4:4、4:2:2、4:1:1及4:2:0。
① RGB444
444是指 YCbCr三个通道的采样率相同,因此在采用 YCbCr颜色空间 4:4:4格式生成的图像里,每个像素的三个分量信息完整,经8比特量化后,未经压缩的每个像素占用 3个byte。
② RGB422
422是指图像中水平方向的色度采样率是4:4:4中的一半,即每个色差通道 Cb 和 Cr 水平方向采样率为亮度通道Y的一半。对非压缩的8比特量化图像,每两个水平方向相邻的像素占用 4个byte。
③ RGB411
411是指和亮度Y相比,在水平方向上对色度 Cb 和 Cr 只进行 4:1的采样,对非压缩的8比特量化图像,每四个水平方向相邻的像素占用 6个byte,其视觉效果对低端用户和消费类产品仍可接受。
④ RGB420
420并不是说只有 Y、Cb,而没有 Cr 分量。而是对图像每行而言,只有一种色度分量以相对于Y分量2:1的采样率采集或存储;而上下相邻的两行存储不同的色度分量,即如果上一行 YCbCr是4:2:0,下一行YCbCr 就是4:0:2,再下一行又是4:2:0,以此类推。对非压缩的8比特量化图像,每个2行2列相邻的4像素块占用 6个byte。
可见,YCbCr颜色空间最大的优点是表示图像数据时只需占用较少空间。
类似的还包括 YUV、YIQ、YPbPr 等颜色空间,都属于亮度 / 色度型电视系统颜色空间。其中,YUV 是用在 PAL 和 SECAM 模拟彩色电视制式中的颜色空间,Y表示亮度,也就是灰阶值,U和V表示色度或色差分量。YIQ是用在 NTSC 模拟彩色电视制式中的颜色空间;YPbPr是用于高清晰度电视的颜色空间。
无论是面向数字电视还是模拟电视的亮度、色度型颜色空间,主要用途都是电视信号传输,都是把 RGB 颜色空间变换成亮度和色度,将亮度和色度分离,用一个分量表示非色彩的亮度感知,用两个独立的分量表示色彩感知,目的是通过压缩色度数据,在有效播送彩色电视图像的前提下,显著压缩信号传播过程中图像的数据量。
当需要黑白图像时也非常方便。这些颜色空间都是与设备相关的,而且在闭环系统中的使用条件也相当严格。
(4)CMY 颜色空间
当背景光照射到物体表面时,物体将吸收一部分光线,并将剩下的光线反射回来,反射的光线就是人们看到的物体的颜色,这是一种减色色彩模式。CMY (cyan, magenta, yellow)颜色空间就是描述减色混合模式的适合印刷用的一种颜色空间,在印刷机和打印机在纸张或其他印刷材料上再现色彩时使用。有时也称为 CMYK (cyan, magenta, yellow, black)颜色空间。其中,C代表青色,M代表品红色,Y代表黄色,K代表黑色。
CMYK 颜色空间的优点是基于三基色,理论简单,在印刷领域使用时容易生成颜色。但CMYK 颜色空间是与设备或印刷过程相关的,如工艺方法、油墨特性、纸张特性等不同条件有不同的印刷结果。因此,CMYK 也是与设备相关的颜色空间,颜色指定也不够直观。同样,视觉对颜色的感知是非线性的。此外,CMYK 空问具有多值性,对同一种具有相同绝对色度的颜色,在相同的印刷过程前提下,可以用多种CMYK 数字组合来表示和印刷出来。
三、基于彩色滤镜阵列的彩色感知
在彩色光电摄影中,可以通过分光,使用三个传感器分别捕获红、绿、蓝三个通道的颜色分量。但为了降低成本,绝大部分成像系统中采用单芯片 CMOS、CCD 传感器结合彩色滤镜阵列 (color filter array, CFA)的方式捕获彩色图像,虽然牺牲了物理分辦率,但显著简化了结构,降低了价格。做法是在每个感光像素的上面覆盖一个与物理像素相同面积大小,但分别只让红、绿、蓝光线透过的滤镜。
(1)Bayer 格式的 CFA 彩色滤镜阵列设计
Bryce Bayer 于 1976 年发明了Bayer格式彩色滤镜阵列并注册了专利的。Bayer格式彩色滤镜阵列被广泛运用于现代数码相机、摄像机和手机摄像头中,是实现单片 CCD 或 CMOS 传感器拍摄彩色图像的主要技术之一。
Bayer阵列模拟人眼对色彩的敏感程度,采用1红2绿1蓝的排列方式将灰度信息转换成彩色信息。
彩色光线经过 Bayer格式彩色滤镜阵列后,传感器实际获取的每个物理像素仅有一种颜色信息,形成的扩展名为 .raw 格式的图像有明显的红、绿、蓝间隔的马赛克感觉。那么如何得到每个物理像素位置处的 RGB 通道分量并去除马赛克呢?
每个像素仅包括光谱的一部分,必须通过插值实现每个像素的 RGB 值。为了从 Bayer格式得到每个像素的 RGB 格式,需要通过插值填补缺失的两个色彩通道分量。
反马赛克算法需要利用特定插值计算,根据每个像素旁边像素的红、绿、蓝通道值,通过加权平均,插值算出每个像素点缺失的颜色通道取值,获得最终图像。插值的方法有很多,典型的如邻域、线性、3×3插值等,在具体方案中,通过速度与质量的权衡决定最终采用哪种插值的方法。不同插值补偿算法的差异取决于参与插值的邻近像素的数目和各自的权重。
相关文章:

计算摄像技术02 - 颜色空间
一些计算摄像技术知识内容的整理:颜色视觉与感知特性、颜色空间和基于彩色滤镜阵列的彩色感知。 文章目录 一、颜色视觉与感知特性 (1)色调 (2)饱和度 (3)明度 二、颜色空间 (1&…...

Pytorch笔记之分类
文章目录 前言一、导入库二、数据处理三、构建模型四、迭代训练五、模型评估总结 前言 使用Pytorch进行MNIST分类,使用TensorDataset与DataLoader封装、加载本地数据集。 一、导入库 import numpy as np import torch from torch import nn, optim from torch.uti…...

【目标检测】——PE-YOLO精读
yolo,暗光目标检测 论文:PE-YOLO 1. 简介 卷积神经网络(CNNs)在近年来如何推动了物体检测的发展。许多检测器已经被提出,而且在许多基准数据集上的性能正在不断提高。然而,大多数现有的检测器都是在正常条…...
Java 数组转集合
数组转集合 如果仅仅这样转化Arrays.asList(数组),导致集合只能查询,无法进行其他操作,因此,对该方法进行优化: List<实体> list1 new ArrayList<>(Arrays.asList(数组))以上方法就可以使用集合的所有操…...

Elasticsearch:ES|QL 查询语言简介
警告:此功能处于技术预览阶段,可能会在未来版本中更改或删除。 Elastic 将尽最大努力解决任何问题,但技术预览版中的功能不受官方 GA 功能的支持 SLA 的约束。在目前的 Elastic Stack 8.10 中此功能还没有提供。 Elasticsearch 查询语言 (ES|…...
qt qml中listview出现卡顿情况时的常用处理方法
如果在qt QML中使用ListView时出现卡顿情况,可能是因为渲染大量的数据或者在模型中进行复杂的数据处理。以下是常用的解决方法: 1. 设置ListView的缓存策略:通过设置ListView的cacheBuffer属性为适当的值,可以提高滚动的流畅性。…...
Elasticsearch基础操作演示总结
一、索引操作 (一)创建索引 创建Elasticsearch(ES)索引是在ES中存储和管理数据的重要操作之一。索引是用于组织和检索文档的结构化数据存储。 当创建Elasticsearch索引时,通常需要同时指定索引的设置(Se…...

Spring 作用域解析器AnnotationScopeMetadataResolver
博主介绍:✌全网粉丝近5W,全栈开发工程师,从事多年软件开发,在大厂呆过。持有软件中级、六级等证书。可提供微服务项目搭建与毕业项目实战,博主也曾写过优秀论文,查重率极低,在这方面有丰富的经…...

如何发布一个 NPM 包
首先初始化: npm init 文件夹结构 .gitignore Git 库忽略文件清单.npmignore 不包括在 npm 注册库中的文件清单LECENSE 模块的授权文件README.md 说明文档bin 保存模块可执行文件的文件夹doc 保存模块文档的文件夹example 保存模块实际示例lib 保存模块代码man 保存模块的手册…...
Flask小项目教程(含MySQL与前端部分)
CONTENTS 1. 环境配置2. 快速搭建Flask应用程序 1. 环境配置 首先我们在项目的根目录下创建一个 Python 虚拟环境,打开命令行输入以下指令: python -m venv venv启动虚拟环境: .\venv\Scripts\Activate.ps1如果遇到报错:.\venv…...

Eureka
大家好我是苏麟今天带来Eureka的使用 . 提供者和消费者 在服务调用关系中,会有两个不同的角色: 服务提供者:一次业务中,被其它微服务调用的服务。(提供接口给其它微服务) 服务消费者:一次业务…...

STM32G070RBT6-MCU温度测量(ADC)
1、借助STM32CubeMX生成系统及外设相关初始化代码。 在以上配置后就可以生成相关初始化代码了。 /* ADC1 init function */ void MX_ADC1_Init(void) {/* USER CODE BEGIN ADC1_Init 0 *//* USER CODE END ADC1_Init 0 */ADC_ChannelConfTypeDef sConfig {0};/* USER COD…...

数据结构之带头双向循环链表
目录 链表的分类 带头双向循环链表的实现 带头双向循环链表的结构 带头双向循环链表的结构示意图 空链表结构示意图 单结点链表结构示意图 多结点链表结构示意图 链表创建结点 双向链表初始化 销毁双向链表 打印双向链表 双向链表尾插 尾插函数测试 双向链表头插 …...

adb详细教程(四)-使用adb启动应用、关闭应用、清空应用数据、获取设备已安装应用列表
adb对于安卓移动端来说,是个非常重要的调试工具。本篇介绍常用的adb指令 文章目录 一、启动应用:adb shell am start二、使用浏览器打开指定网址:adb shell am start三、杀死应用进程adb shell am force-stop/adb shell am kill四、删除应用所…...

【Spring Boot】日志文件
日志文件 一. 日志文件有什么用二. 日志怎么用三. ⾃定义⽇志打印1. 在程序中得到⽇志对象2. 使⽤⽇志对象打印⽇志3. ⽇志格式说明 四. 日志级别1. ⽇志级别有什么⽤2. ⽇志级别的分类与使⽤ 五. 日志持久化六. 更简单的⽇志输出—lombok1. 添加 lombok 依赖2. 输出⽇志3. lom…...

图像处理与计算机视觉--第五章-图像分割-Canny算子
文章目录 1.边缘检测算子分类2.Canny算子核心理论2.1.Canny算子简单介绍2.2.Canny算子边缘检测指标2.3.Canny算子基本原理 3.Canny算子处理流程3.1.高斯滤波去噪声化3.2.图像梯度搜寻3.3.非极大值抑制处理3.4.双阈值边界处理3.5.边界滞后技术跟踪3.6.Canny算子边缘检测的特点 4…...

LabVIEW开发教学实验室自动化INL和DNL测试系统
LabVIEW开发教学实验室自动化INL和DNL测试系统 如今,几乎所有的测量仪器都是基于微处理器的设备。模拟输入量在进行数字处理之前被转换为数字量。对于参加电气和电子测量课程的学生来说,了解ADC以及如何欣赏其性能至关重要。ADC的不确定性可以根据其传输…...

数据结构: 数组与链表
目录 1 数组 1.1 数组常用操作 1. 初始化数组 2. 访问元素 3. 插入元素 4. 删除元素 5. 遍历数组 6. 查找元素 7. 扩容数组 1.2 数组优点与局限性 1.3 数组典型应用 2 链表 2.1 链表常用操作 1. 初始化链表 2. 插入节点 3. 删除…...

unity 控制玩家物体
创建场景 放上一个plane,放上一个球 sphere,假定我们的球就是我们的玩家,使用控制键w a s d 来控制球也就是玩家移动。增加一个材质,把颜色改成绿色,把材质赋给plane,区分我们增加的白球。 增加组件和脚…...

指数分布优化器(EDO)(含MATLAB代码)
先做一个声明:文章是由我的个人公众号中的推送直接复制粘贴而来,因此对智能优化算法感兴趣的朋友,可关注我的个人公众号:启发式算法讨论。我会不定期在公众号里分享不同的智能优化算法,经典的,或者是近几年…...

Docker 离线安装指南
参考文章 1、确认操作系统类型及内核版本 Docker依赖于Linux内核的一些特性,不同版本的Docker对内核版本有不同要求。例如,Docker 17.06及之后的版本通常需要Linux内核3.10及以上版本,Docker17.09及更高版本对应Linux内核4.9.x及更高版本。…...
java 实现excel文件转pdf | 无水印 | 无限制
文章目录 目录 文章目录 前言 1.项目远程仓库配置 2.pom文件引入相关依赖 3.代码破解 二、Excel转PDF 1.代码实现 2.Aspose.License.xml 授权文件 总结 前言 java处理excel转pdf一直没找到什么好用的免费jar包工具,自己手写的难度,恐怕高级程序员花费一年的事件,也…...

关于iview组件中使用 table , 绑定序号分页后序号从1开始的解决方案
问题描述:iview使用table 中type: "index",分页之后 ,索引还是从1开始,试过绑定后台返回数据的id, 这种方法可行,就是后台返回数据的每个页面id都不完全是按照从1开始的升序,因此百度了下,找到了…...
Linux简单的操作
ls ls 查看当前目录 ll 查看详细内容 ls -a 查看所有的内容 ls --help 查看方法文档 pwd pwd 查看当前路径 cd cd 转路径 cd .. 转上一级路径 cd 名 转换路径 …...

srs linux
下载编译运行 git clone https:///ossrs/srs.git ./configure --h265on make 编译完成后即可启动SRS # 启动 ./objs/srs -c conf/srs.conf # 查看日志 tail -n 30 -f ./objs/srs.log 开放端口 默认RTMP接收推流端口是1935,SRS管理页面端口是8080,可…...
Rapidio门铃消息FIFO溢出机制
关于RapidIO门铃消息FIFO的溢出机制及其与中断抖动的关系,以下是深入解析: 门铃FIFO溢出的本质 在RapidIO系统中,门铃消息FIFO是硬件控制器内部的缓冲区,用于临时存储接收到的门铃消息(Doorbell Message)。…...
使用Matplotlib创建炫酷的3D散点图:数据可视化的新维度
文章目录 基础实现代码代码解析进阶技巧1. 自定义点的大小和颜色2. 添加图例和样式美化3. 真实数据应用示例实用技巧与注意事项完整示例(带样式)应用场景在数据科学和可视化领域,三维图形能为我们提供更丰富的数据洞察。本文将手把手教你如何使用Python的Matplotlib库创建引…...
【Android】Android 开发 ADB 常用指令
查看当前连接的设备 adb devices 连接设备 adb connect 设备IP 断开已连接的设备 adb disconnect 设备IP 安装应用 adb install 安装包的路径 卸载应用 adb uninstall 应用包名 查看已安装的应用包名 adb shell pm list packages 查看已安装的第三方应用包名 adb shell pm list…...

day36-多路IO复用
一、基本概念 (服务器多客户端模型) 定义:单线程或单进程同时监测若干个文件描述符是否可以执行IO操作的能力 作用:应用程序通常需要处理来自多条事件流中的事件,比如我现在用的电脑,需要同时处理键盘鼠标…...

springboot 日志类切面,接口成功记录日志,失败不记录
springboot 日志类切面,接口成功记录日志,失败不记录 自定义一个注解方法 import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target;/***…...