详解 YUV,一文搞定 YUV 是什么!

news2025/7/17 21:14:19

YUV 是一个颜色模型,通常用作彩色图像管道的一部分。它对彩色图像或视频进行编码时考虑到了人类的感知,与“直接”的 RGB 表示相比,允许减少色度分量的带宽。历史上,术语 YUV 和 Y’UV 用于电视系统中颜色信息的特定模拟编码。今天,YUV 这个术语在计算机行业通常用来描述使用 YCbCr 编码的色彩空间。

YUV 模型定义了一个亮度分量(Y),表示物理线性空间亮度,以及两个色度分量,分别称为 U(蓝色投影)和 V(红色投影)。它可以用于 RGB 模型和不同颜色空间之间的转换。

密切相关的 Y’UV 模型使用亮度分量(Y’)—— 非线性感知亮度,素数符号(‘)表示伽马校正。Y’UV 用于 PAL 模拟彩电标准(不包括 PAL-n)。之前的黑白系统只使用亮度(Y’)信息。彩色信息( U 和 V)通过子载波分别添加,使黑白接收机仍然能够接收和显示接收端原生黑白格式的彩色图像传输,而不需要额外的传输带宽。

至于 Y、Y’、U 和 V 均不是缩写。用字母 Y 表示亮度可以追溯到 XYZ 三原色的选择。这很自然地使得 luma(Y’) 中使用相同的字母,这近似于感知上均匀的亮度相关。同样,选择 U 和 V 是为了将 U 和 V 轴与其他空间(如 x 和 y 色度空间)区分开来。

伽马校正

实际上,研究表明,人类视觉系统是以对数函数的方式来感知光亮度。这意味着,人眼会提高暗部的敏感度,降低高光部分的敏感度。

在这里插入图片描述

从数学角度看,感知光强度和测量光强度之间存在一个近似的平方关系,具体如下式所示。

近 似 感 知 亮 度 = 测 量 亮 度 近似感知亮度 = \sqrt{测量亮度} =
由于人类视觉感知系统不是以线性方式工作的,因此必须使用非线性曲线来对线性数据进行变换,从而使得拍摄的图像色调与我们的视觉系统的工作方式相匹配。这个过程也就是我们所说的伽马校正。

V o u t = A V i n γ V_{out} = AV_{in}^γ Vout=AVinγ

因此,在从线性 RGB 空间转换到非线性 RGB 空间时,需要 γ 作为转换参数。

一、背景

当工程师们希望在黑白基础设施中安装彩色电视时,Y’UV 就被发明了。他们需要一种既能与黑白电视兼容,又能添加色彩的信号传输方法。亮度分量已经作为黑白信号存在;他们将 UV 信号加入其中作为解决方案。

由于 U 和 V 是色差信号,因此选择了色度的 UV 表示而不是直接的 R 和 B 信号。换句话说,U 和 V 信号告诉电视在不改变亮度的情况下改变某个光点的颜色。或者,U 和 V 信号告诉显示器使得某个颜色亮度依某个基准偏移。U 和 V 值越高(或负值时越低),光点的饱和度(色彩)就越高。U 和 V 值越接近零,颜色偏移越小,这意味着红色、绿色和蓝色的光将更加明亮,产生一个灰色的点。这就是使用色差信号的好处,即它不是告诉颜色有多少红色,而是告诉它比绿色或蓝色多多少红色。反过来,这意味着当 U 和 V 信号为零或不存在时,它将显示一个灰度图像。如果要使用 R 和 B,即使在黑白场景中,它们也将具有非零值,需要所有三个数据携带信号。这在彩色电视的早期是很重要的,因为旧的黑白电视信号没有 U 和 V 信号存在,这意味着彩色电视只是当做黑白电视“开箱即用”。此外,黑白接收机可以接收 Y’ 色信号而忽略 U 和 V 色信号,使 Y’UV 向后兼容现有所有黑白设备的输入和输出。如果彩色电视标准没有使用色差信号,这可能意味着彩色电视会从黑白广播中产生奇怪的颜色,或者需要额外的电路将黑白信号转换为彩色。因为没有额外的可用带宽,有必要为色度信道分配一个较窄的带宽。如果一些亮度信息通过色度通道到达(就像使用 RB 信号而不是差分 UV 信号那样),黑白电视分辨率就会受到影响。

U-V 颜色平面的例子,Y’ 值 = 0.5,在 RGB 色域内表示:

在这里插入图片描述

下面是分别包含 Y’、U 和 V 分量的图像:

在这里插入图片描述

二、相关的颜色模型

术语 Y’UV、YUV、YCbCr、YPbPr 等的范围有时是模糊和重叠的。历史上,YUV 和 Y’UV 被用来指模拟电视系统。YCbCr 用于对颜色信息进行数字编码,以适应视频和图像的压缩和传输格式,如 MPEG 和 JPEG。同样,模拟分量视频中使用的 YPbPr 颜色模型有时也称为 Y’UV。

三、与 RGB 转换

Y’UV 信号通常由 RGB(红、绿、蓝)源创建。将 R、G 和 B 的加权值相加得到 Y’,Y’ 是整体亮度或亮度的度量。U 和 V 被计算为 Y’ 与 B 和 R 值之间的比例差。

SDTV(标准清晰度电视)与 BT.470

PAL 标准定义了以下常数,这些常数来自 BT.470(后来在 BT.601 中使用了称为矩阵系数的相同常数,尽管它使用了0.5 而不是 0.436 和 0.615):

在这里插入图片描述

Y’UV 中的 PAL 信号由 R’G’B’ 计算得到(只有 SECAM IV(SECAM 是三大彩色电视标准之一,其他则是欧洲 PAL 和北美 NTSC) 使用线性 RGB),如下所示:

在这里插入图片描述

Y’、U 和 V 的结果范围分别是 [0,1]、[−Umax, Umax] 和 [−Vmax, Vmax]。

将上面的转换应用于 Y’UV 转 RGB 上:

在这里插入图片描述

同样地,把这些常数的值(R’G’B’ 转 Y’UV 时需要将 Y’ 使用公式 (6) 展开)代入矩阵,就得到了 BT.470 System M (PAL)的公式:

在这里插入图片描述

对于较小的 Y’ 值,可能会得到 R、G 或 B 的负值,因此在实践中,我们将 RGB 结果规范在区间 [0,1] 内,或者在 Y’CbCr 中包含更准确的值。

HDTV(高清晰度数字电视)与 BT.709

对于高清晰度电视,ATSC 决定改变 WR 和 WB 的基本值,与之前在 SDTV 系统中选择的值相比。对于 HDTV,这些值由 Rec.709 提供。这个决定进一步影响了 Y’UV↔RGB 转换的矩阵,使其成员值也略有不同。因此,对于任何 RGB 三元组,SDTV 和 HDTV 通常有两种不同的 Y’UV 表示: SDTV-Y’UV 和 HDTV-Y’UV。这具体意味着,当直接在 SDTV 和 HDTV 之间转换时,亮度(Y’)信息大致相同,但色度(U & V)需要转换。

BT.709 定义了以下权重值:

在这里插入图片描述

BT.709 的模拟形式的转换矩阵如下,但没有证据表明它们曾经在实践中使用过:

在这里插入图片描述

R’G’B’ 与 Y’PbPr 转换

Y’CbCr 信号,在将信号转换为数字形式的缩放和偏移之前被称为 YPbPr,由相应的伽马调整 RGB(红、绿、蓝)源创建,使用三个定义的常数 KR、KG 和 KB:

在这里插入图片描述

其中 KR、KG 和 KB 通常由对应的 RGB 空间定义推导而来,需要满足:

在这里插入图片描述

等价的矩阵操作通常称为“颜色矩阵”(color matrix):

在这里插入图片描述

它的逆函数:

在这里插入图片描述

在这里,(‘)符号表示正在使用伽马校正,因此,R’、 G’ 和 B’ 的范围通常在 0 到 1 之间,0 代表最小强度(例如,用于显示黑色),1 代表最大强度(例如,用于显示白色)。得到的亮度(Y)值标称范围为从 0 到 1,色度(PB 和 PR)值标称范围为从 -0.5 到 +0.5。

Y’PbPr 转为 Y’CbCr

当以数字形式表示信号时,结果会被缩放和舍入,并且通常会加上偏移量。例如,根据规范(例如 MPEG-2)对 Y’ 组件进行缩放和偏移,在使用 8 位表示时,黑色的值为 16,白色的值为 235。该标准有 8 位数字化版本的 CB 和 CR,它们被缩放到 16 到 240 之间。因此,在 YCbCr 空间使用颜色矩阵或处理时,有时需要重新缩放分数 (235-16)/(240-16) = 219/224,当后续处理没有使用更高的比特深度时,会导致量化失真。

ITU-R BT.601 转换

用于数字组件视频的 ITU-R BT.601(原 CCIR 601)标准中为标准清晰度电视(SDTV)用途定义的 Y’CbCr 格式源自相应的 RGB 空间(ITU-R BT.470-6 System M primaries),这组系数上面已经提及过了,唯一的区别在于 Umax 和 Vmax 为 0.5,具体如下所示:

在这里插入图片描述

根据上述常数 ,可以推导出 ITU-R BT.601 的以下公式:

由模拟 R’G’B’ 推导出的模拟 Y’PbPr (代入 R’G’B’ 转 Y’PbPr 矩阵)如下:

在这里插入图片描述

数字 Y’CbCr(每个样本 8 位)由模拟 R’G’B’ 转化,如下所示:

在这里插入图片描述

以上的公式考虑了 Y’CbCr 分量上的偏移和缩放,具体地,Y’ 增加 16,而 Cb、Cr 由于范围为 [-0.5, 0.5],因此转化为 0 ~ 255 之间,需要加上偏移量 128,最后还需要考虑 235-16 = 219,240-16 = 224。也就是使用了如下公式:

在这里插入图片描述

Y’ 信号的最终范围为 16 ~ 235 (Cb 和 Cr 为 16 ~ 240);0 ~ 15 的值称为 footroom,236 ~ 255 的值称为 headroom。

另外,数字 Y’CbCr 也可以由数字R’d G’d B’d(每个样本 8 位,每位使用全量程,0 代表黑色,255 代表白色)根据以下公式导出:

在这里插入图片描述

在下面的公式中,缩放因子乘以(256/255)。这使得分母中的值 256 可以方便通过移位来计算,将上面的公式分子和分母同时乘以 (256/255)即可。

在这里插入图片描述

如果 R’d G’d B’d 数字源包括 footroom 和 headroom,则需要首先从每个信号中减去 footroom 偏移量 16,并在公式中包含比例因子 255/219。

不进行舍入,直接使用 ITU-R BT.601 推荐值的逆变换如下:

在这里插入图片描述
进一步以分母的值为 256 可得如下变换(比如 (255 / 219) * 256 = 298.0821917808219):

在这里插入图片描述

JPEG 转换

JFIF 使用 JPEG 支持修改的 Rec.601 Y’CbCr,其中 Y’,CB 和 CR 有完整的 8 位范围 [0…255]。下面是表示为六位小数精度的转换方程。注意,对于下面的公式,每个输入的范围(R,G,B)也是完整的 8 位范围 [0…255]。

在这里插入图片描述

逆变换如下:

在这里插入图片描述

基于 SDTV(ITU601)转 R’G’B’ 的另一个公式

R’、G’、B’ 的取值范围为 16 ~ 235,Y’ 的取值范围为 16 ~ 235,Cb/Cr 的取值范围为 16 ~ 240。 240 - 16 = 224,235 - 16 = 219。

在这里插入图片描述
进一步计算可得:
在这里插入图片描述

逆变换如下:

在这里插入图片描述

进一步计算可得:

在这里插入图片描述

不少 OpenGL es GLSL 内部使用了这个公式从 YUV 转 RGB。根据上面谈及的 YUV 和 RGB 取值范围,这个公式输出的 RGB 取值范围是 16 ~ 235,而我们实际可能期望的是 0 ~ 255,也就是说转化公式其实用错了!

ITU-R BT.709 转换

ITU-R BT.709 标准规定了 Y’CbCr 的另一种形式,主要用于 HDTV。在一些面向计算机显示的应用程序中也使用了较新的形式,如 sRGB(但用于 YCbCr、sYCC 的 sRGB 形式的矩阵仍然是 BT.601)。在这种情况下,Kb 和 Kr 的值不同,但使用它们的公式是相同的。对于 ITU-R BT.709,常数如下:

在这里插入图片描述

这种形式的 Y’CbCr 是基于 RGB 模型,更符合较新的 CRT 和其他现代显示设备的荧光粉发射特性。BT.709的转换矩阵如下:

在这里插入图片描述

ITU-R BT.2020 转换

在这里插入图片描述

BT.2020-NCL 的解码矩阵有 14 位小数:

在这里插入图片描述

矩阵中较小的值没有舍入,它们是精确值。对于精度有限的系统(例如,8 或 10 位),可以使用上述矩阵的较低精度,例如,在小数点后仅保留 6 位。

四、YUV 格式

此处主要指 YCbCr。首先,我们可以将 YUV 格式按照数据大小分为三种格式:YUV 420、YUV 422 和 YUV 444。由于人眼对 Y 的敏感度远超于对 U 和 V 的敏感,所以有时候可以多个 Y 分量共用一组 UV,这样既可以极大得节省空间,又可以不太损失质量。这三种格式就是按照人眼的特性制定的。

  • YUV 420,由 4 个 Y 分量共用一套 UV 分量
  • YUV 422,由 2 个 Y 分量共用一套 UV 分量
  • YUV 444,不共用,一个 Y 分量使用一套 UV 分量

按照 YUV 的排列方式,再次将 YUV 分成三个大类:Planar(平面)、Semi-Planar(半平面) 和 Packed(打包)。另外,Interleaved(交错) 是属于 Packed 的。

  • Planar YUV 三个分量分开存放
  • Semi-Planar Y 分量单独存放,UV 分量交错存放
  • Packed YUV 三个分量全部交错存放

在这里插入图片描述

4.1 采样方式

YUV 图像的主流采样方式有如下三种:

  • YUV 4:4:4 采样
  • YUV 4:2:2 采样
  • YUV 4:2:0 采样

YUV 4:4:4 采样,意味着 Y、U、V 三个分量的采样比例相同,因此在生成的图像里,每个像素的三个分量信息完整,都是 8 bit,也就是一个字节。

YUV 4:2:2 采样,意味着 UV 分量是 Y 分量采样的一半,Y 分量和 UV 分量按照 2:1 的比例采样。如果水平方向有 10 个像素点,那么采样了 10 个 Y 分量,而只采样了 5 个 UV 分量。

YUV 4:2:0 采样,并不是指只采样 U 分量而不采样 V 分量。而是指,在每一行扫描时,只扫描一种色度分量(U 或者 V),和 Y 分量按照 2:1 的方式采样。比如,第一行扫描时,YU 按照 2:1 的方式采样,那么第二行扫描时,YV 分量按照 2:1 的方式采样。对于每个色度分量来说,它的水平方向和竖直方向的采样和 Y 分量相比都是 2:1。

下面图中黑点表示采样该像素点的 Y 分量,以空心圆圈表示采用该像素点的 UV 分量。

在这里插入图片描述

4.2 具体格式

4.2.1 I420

I420 是 YUV 420 Planar 的一种,YUV 分量分别存放,先是 w * h 长度的 Y,后面跟 w * h * 0.25 长度的 U, 最后是 w * h * 0.25 长度的 V,总长度为 w * h * 1.5。

4.2.2 YV12

YV12 是 YUV 420 Planar 的一种,与 I420 唯一不同的是,YV12 是先 V 后 U。

4.2.3 NV12

NV12 是 YUV 420 Semi-Planar 的一种,Y 分量单独存放,UV 分量交错存放,UV 在排列的时候,从 U 开始(即 UVUV…)。总长度为 w * h * 1.5。

4.2.4 NV21

NV21 是 YUV 420 Semi-Planar 的一种,与 NV12 唯一不同的是,UV 在排列的时候,从 V 开始(即 VUVU…)。

假设一个分辨率为 6X4 的 YUV 图像(占用内存大小 6 ∗ 4 ∗ 1.5 = 36 字节),相同的背景色代表 Y 使用的 UV ,它们的 YUV 420 格式族如下图:

在这里插入图片描述

4.2.5 I422

I422 是 YUV 422 Planar 的一种,YUV 分量分别存放,先是 w * h 长度的 Y,后面跟 w * h * 0.5 长度的 U, 最后是 w * h * 0.5 长度的 V,总长度为 w * h * 2。

4.2.6 YV16

YV16 是 YUV 422 Planar 的一种,与 I422 唯一不同的是,YV16 是先 V 后 U。

4.2.7 NV16

NV16 是 YUV 422 Semi-Planar 的一种,Y 分量单独存放,UV 分量交错存放,UV 在排列的时候,从 U 开始(即 UVUV…)。总长度为 w * h * 2。

4.2.8 NV61

NV61 是 YUV 422 Semi-Planar 的一种,与 NV16 唯一不同的是,UV 在排列的时候,从 V 开始(即 VUVU…)。

4.2.9 YUVY

YUVY 属于 YUV 422 Interleaved 的一种。事实上,Interleaved 是属于 Packed 的,但是在 422 中,用 Interleaved 更加形象一些。在 Packed 内部,YUV 的排列顺序是 Y U V Y,两个 Y 共用一组 UV。

4.2.10 VYUY

VYUY 属于 YUV 422 Interleaved 的一种。在 Packed 内部,YUV 的排列顺序是 VYUY,两个 Y 共用一组 UV。

4.2.11 UYVY

UYVY 属于 YUV 422 Interleaved 的一种。在 Packed 内部,YUV 的排列顺序是 UYVY,两个 Y 共用一组 UV。

假设一个分辨率为 6X4 的 YUV 图像(占用内存大小 6 ∗ 4 ∗ 2 = 48 字节),相同的背景色代表 Y 使用的 UV ,它们的 YUV 422 格式族如下图:

在这里插入图片描述

4.2.12 I444

I444 属于 YUV 444 Plannar 的一种。YUV 分量分别存放,先是 w * h 长度的 Y,后面跟 w * h 长度的 U, 最后是 w * h 长度的 V,总长度为 w * h * 3。

4.2.13 YV24

YV24 属于 YUV 444 Plannar 的一种。与 I444 唯一不同的是,YV24 是先 V 后 U。

4.2.14 NV24

NV24 是 YUV 444 Semi-Planar 的一种,Y 分量单独存放,UV 分量交错存放,UV 在排列的时候,从 U 开始(即 UVUV…)。总长度为 w * h * 3。

4.2.15 NV42

NV42 是 YUV 444 Semi-Planar 的一种,与 NV24 唯一不同的是,UV 在排列的时候,从 V 开始(即 VUVU…)。

4.2.16 YUV 444 Packed

YUV 444 Packed 是 YUV 打包格式,YUV 排列方式为 YUV YUV YUV …,总长度为 w * h * 3。

假设一个分辨率为 6X4 的 YUV 图像(占用内存大小 6 ∗ 4 ∗ 3 = 72 字节),相同的背景色代表 Y 使用的 UV ,它们的 YUV 444 格式族如下图:

在这里插入图片描述
参考资料

  1. https://handwiki.org/wiki/YUV
  2. https://handwiki.org/wiki/YCbCr
  3. https://zhuanlan.zhihu.com/p/498289926
  4. https://zhuanlan.zhihu.com/p/384455058

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

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

相关文章

HTML学生作业网页:使用HTML+CSS技术实现传统文化网页设计题材-西安事变历史纪念馆 10页 带视频 带音乐

Web前端开发技术 描述 网页设计题材,DIVCSS 布局制作,HTMLCSS网页设计期末课程大作业 | 茶文化网站 | 中华传统文化题材 | 京剧文化水墨风书画 | 中国民间年画文化艺术网站 | HTML期末大学生网页设计作业 HTML:结构 CSS:样式 在操作方面上运…

《上海悠悠接口自动化平台》-4.注册用例集实战演示

前言 以注册接口为例,在平台上演示如何维护接口自动化用例 访问地址http://47.108.155.10/login.html 用户名: demo, 密码: demo123 有兴趣的可以自己去查看用例规范 和 运行效果。 API 接口层 先找出注册接口的接口文档,以下是接口文档部分 主要关…

Redis配置哨兵及其机制

目录一、Redis哨兵诞生背景二、关于哨兵三、哨兵机制的基本流程3.1 监控3.2 选主3.3 通知四、关于主观下线和客观下线4.1 主观下线4.2 客观下线五、选主规则3.1 优先级最高的从库得分高3.2 和旧主库同步程度最接近的从库得分高3.3 ID 号小的从库得分高六、配置流程七、总结一、…

网络面试-0x10地址栏输入URL敲入回车后发生了什么?

一、 URL解析 1、 首先判断你输入的是一个合法的URL还是待搜索的关键字 2、如果是URL,对URL进行解析 二、 DNS查询 1、设备 —— 本地DNS服务器 —— xx 递归过程 2、DNS服务器和 顶级域名服务器、二级域名服务器、权威域名服务器之间是迭代过程。 三、 TCP连接 …

redis和selery相关知识点

目录标题一:redis字符串操作二:redis hash操作三:redis列表操作四:redis管道1.redis数据库,是否支持事务?2.redis代码实现事务五:redis其他操作六:django中集成redis1.方式一:直接使…

用python就获取到照片拍摄时的详细位置【源码公开】

文章目录一.引言1.读取照片信息,获取坐标2.通过baidu Map的API将GPS信息转换成地址。二.源码附上!!!注意事项一.引言 先看获取到的效果 拍摄时间:2021:12:18 16:22:13 照片拍摄地址:(内蒙古自治区包头市昆都仑区, 内…

pytorch从零开始搭建神经网络

目录 基本流程 一、数据处理 二、模型搭建 三、定义代价函数&优化器 四、训练 附录 nn.Sequential nn.Module model.train() 和 model.eval() 损失 图神经网络 基本流程 《PyTorch深度学习实践》完结合集_哔哩哔哩_bilibili1. 数据预处理(Dataset、…

由浅入深,一起来刷Java高级开发岗面试指南,明年面试必定无忧!

前言 我只想面个CV工程师,面试官偏偏让我挑战造火箭工程师,加上今年这个情况更是前后两男,但再难苟且的生活还要继续,饭碗还是要继续找的。在最近的面试中我一直在总结,每次面试回来也都会复盘,下面是我根…

为啥50岁以后,病就增多了?中老年人想要少生病,该做些什么?

人到中年,生活会有很多变化,很多男性朋友从以前别人口中的小伙子,变成现在家里的顶梁柱,很多以前别人口中的小姑娘,变成现在的贤妻良母,或者拥有自己的一番事业。角色在变化的同时,身体情况也发…

高压电气系统验证

纯电和混合动力汽车中的高压电气系统关乎整车的能耗和安全,需要在部件及整车开发阶段做全面的测试与验证。符合ISO 21498*标准的电压、电流一体式测量模块CSM HV BM系列产品,可以直接串联在整车级别的高压电气线缆中,安全可靠的完成高压电气系…

java面试强基(2)

字符型常量和字符串常量的区别? 形式 : 字符常量是单引号引起的一个字符,字符串常量是双引号引起的 0 个或若干个字符。 含义 : 字符常量相当于一个整型值( ASCII 值),可以参加表达式运算; 字符串常量代表一个地址值(该字符串在内存中存放位置)。 占内存大小 &…

SpringCloud 核心组件Feign【远程调用自定义配置】

目录 1,Feign远程调用 1.1:Feign概述 1.2:Feign替代RestTemplate 1):引入依赖 2):添加注解 3):编写Feign的消费服务,提供服务 4):测…

C. Discrete Acceleration(浮点二分)

Problem - 1408C - Codeforces 题意: 有一条长度为l米的道路。路的起点坐标为0,路的终点坐标为l。 有两辆汽车,第一辆站在路的起点,第二辆站在路的终点。它们将同时开始行驶。第一辆车将从起点开到终点,第二辆车将从终点开到起…

通俗易懂的React事件系统工作原理

前言 React 为我们提供了一套虚拟的事件系统,这套虚拟事件系统是如何工作的,笔者对源码做了一次梳理,整理了下面的文档供大家参考。 在 React事件介绍 中介绍了合成事件对象以及为什么提供合成事件对象,主要原因是因为 React 想…

【附源码】Python计算机毕业设计图书商城购物系统

项目运行 环境配置: Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术: django python Vue 等等组成,B/S模式 pychram管理等等。 环境需要 1.运行环境:最好是python3.7.7,我…

MongoDB学习一:相关概念和单机部署

目录一、MongoDB 应用场景:二、什么时候使用MongoDB:三、MongoDB简介:四、体系结构:五、数据模型:六、MongoDB的特点:七、MongoDB单机部署一、MongoDB 应用场景: 二、什么时候使用MongoDB&#…

对FD描述符(包括inode以及三张表)的一点理解

文件描述符,简单来说是一个从0开始递增的非负整数。 具体来说是linux/unix对文件系统的一种底层抽象,这种抽象是通过三张表来实现的。 这三张表分别是: 1.进程级的文件描述符表;(文件标志位/文件指针) 2.系统级的打开文件描述…

Android Studio App开发之下载管理器DownloadManager中显示、轮询下载进度、利用POST上传文件讲解及实战(附源码)

运行有问题或需要源码请点赞关注收藏后评论区留言~~~ 一、在通知栏显示下载进度 利用GET方式读取数据有很多缺点比如1:无法端点续传 一旦中途失败只能重新获取 2:不是真正意义上的下载操作 无法设置参数 3:下载过程中无法在界面上上展示下…

NAFNet(ECCV 2022)-图像修复论文解读

文章目录解决问题算法背景Simple BaselinePlain Block归一化激活函数Attention机制总结NAFNetSimpleGate替换GELUSCA替换CA总结实验应用RGB图像去噪图像去模糊RAW图像去噪结论论文: 《Simple Baselines for Image Restoration》github: https://github.com/megvii-research/NAF…

同事:这个页面的逻辑没什么能复用的,不抽组件也没什么影响吧?

前言 最近在维护同事的一个项目时,发现有不少单个vue文件一千余行,同一个文件上有倒计时、有输入信息的表单; 当时我就在想:是不是策划经常改需求或者排期紧急,所以没抽组件呢。 沟通过程 以下同事称为阿A 我&#…