图像处理简介
目录
基本术语
1 .图像(image)
1.1 像素(Pixel)
1.2 颜色深度(Color Depth)
1.3 分辨率(Resolution)
1.4 像素宽高比(Pixel Aspect Ratio)
1.5 帧率(FPS)
1.6 码率(BR)
1. 恒定码率(CBR)
2. 可变码率(VBR)
1.7 扫描
1.隔行扫描(Interlaced)
2.逐行扫描
2. 颜色空间
2.1 采样方式
2.2. YUV422采样的储存格式
1. YUYV格式
2. UYVY格式
3. YUV422P格式
2.3 YUV420采样的储存格式
1. YV12,YU12格式
2. NV12,NV21格式
2.4 总结
3.消除冗余
3.1怎么消除冗余
基本术语
1 .图像(image)
可以将图像视为一个三维矩阵,分别为红色平面,绿色平面,和蓝色平面。我们把这个矩阵里的每一个点称为像素。像素的色彩由三原色的强度表示,例如一个红色像素是由强度为0的绿色,强度为0的蓝色和强度最大的红色组成。

1.1 像素(Pixel)
像素是图像中的物理点,他是屏幕上表示图片的最小可控元素。例如上述中的各个分量表示的强度点,即为一个像素值。
1.2 颜色深度(Color Depth)
存储颜色的强度,需要占用一定大小的数据空间,这个大小被称为颜色深度,用于指示单个像素颜色的位数。假如每个颜色平面的强度占用8bit(0-255),那么颜色深度就是24bit,这样可以显示2的24次方种不同的颜色。

1.3 分辨率(Resolution)
一张图片的像素的数量。通常表示为:widthxheight;
1.4 像素宽高比(Pixel Aspect Ratio)
像素宽高比,也叫PAR,是一个数学比率,用于描述图像中像素的宽度和高度的比值。


1.5 帧率(FPS)
将单位时间内连续切换n个视频画面,叫做帧率,其中n即为帧率。
1.6 码率(BR)
播放一段视频每秒所需的是数据量叫做比特率,即码率(BitRate)
其计算公式为:Bitrate=width x height * bits_per_pixel *fps;
例如,一段视频每秒30帧,每个像素24bit,分辨率为480x240。如果我们不做压缩,他将需要82.944Mbps的带宽。
1. 恒定码率(CBR)
当比特率几乎恒定时称为恒定比特率(constant bitrate即 CBR)。

以恒定的1.2Mbps码率播放如下内容:
2. 可变码率(VBR)
当比特率可变时,称为可变比特率(Variable Bitrate即VBR),比如可变码率播放如下内容:

前面连续黑帧率的时候,较低码率为200Kbps,后面实际的信息量的内容,以较高的码率2.4Mbps呈现,这样可以有效的优化带宽,并能够较好的呈现有价值的信息。
1.7 扫描
在传送图像的时候,将每一帧图像分解为像素,之后一个一个像素,一行一行顺序传送的方式就叫做扫描。
1.隔行扫描(Interlaced)
在早期,工程师们想出了一项技术能将视频的感官帧率加倍而没有消耗额外带宽。这项技术被称为隔行扫描,总体来说,他在一个时间点发送一个画面用于填充屏幕的一半,而下一个时间点发送画面用于填充屏幕的另一半。

原理就是将一帧的这一幅画面分为两个场来扫描。先扫描奇数行得到第一场,然后扫描偶数行得到第二场。两个场加起来组成完整的画面。快速播放的时候由于视觉暂留效应,人眼不会注意到两场只有一半的扫描行,而会看到完整的一帧。
2.逐行扫描
在带宽充裕的今天,基本上都使用了逐行,按照每行来一次绘制。
2. 颜色空间
一般来说,我们最熟悉的颜色空间是由RGB三基色组成的颜色空间,还有一种模型是将亮度,颜色分离开的,他被称为YCbCr,这种颜色模型使用Y来表示亮度,还有两个颜色通道:Cb(蓝色色度)和Cr(红色色度)。YCbCr可以由RGB转换得来,也可以转换回RGB。通过公式可以相互转换。
RGB ->YUV:
Y=0.299R+0.587G+0.114B
Cb=0.564(B-Y)
Cr=0.713(R-Y)
YUV->RGB:
R=Y + 1.402Cr
G=Y-0.344Cb – 0.714Cr
B=Y + 1.772Cb
2.1 采样方式
主流的采样方式由三种,
YUV4:4:4 每一个Y对应一组UV分量
YUV4:2:2 每两个Y共用一组UV分量
YUV4:2:0, 每四个Y共用一组UV分量
2.2. YUV422采样的储存格式
1. YUYV格式

从内存分布图可以看出,相邻的两个Y共用相邻的两个UV,比如坐标(0,0),与坐标(0,1)其中的像素点为Y0U0V0,Y1U0V0,其中他们UV分量是同一个值。那么相对于RGB88,存储数据量少多少呢?
RGB888 size = 10*5(R) + 10*5(G) + 10*5(B) = 150byte
YUYV size = 10*5(Y) + 10/2*5(U) + 10/2*5(V) =100byte
也就是说YUYV的储存数据量是RGB888的数据量的2/3。但是显示效果几乎是一样的。
2. UYVY格式
与YUYV不同的是UV分量的排列顺序不同而已。
3. YUV422P格式

YUV422P是一种平面模式,也就是说他们的YUV数据存储不是交错存储,而是先存储所有的Y分量,然后储存所有的U(Cb)分量,最后储存所有的V(Cr)分量.
每个分量的起始地址计算:
Y分量的地址:也就是内存的基地址
U分量的地址: base + 10x5(Y size)
V 分量的地址: base + 10x 5(y size) + 10x5/2(U size)
2.3 YUV420采样的储存格式
1. YV12,YU12格式
与YUV422P的储存格式类似,将Y,U,V分量分别打包,依次存储。

从内存分布图可以看出,相邻的四个Y共用相邻的两个UV,比如坐标(0,0),与坐标(0,1),坐标(0,2),坐标(0,3)其中的像素点为Y0U0V0,Y1U0V0,Y2U0V0,Y2U0V0,可以看出他们UV分量是同一个值。那么相对于RGB88,存储数据量少多少呢?
RGB888 size = 12*5(R) + 12*5(G) + 12*5(B) = 180byte
YUYV size = 12*5(Y) + 12/4*5(U) + 12/4*5(V) =90byte
也就是说YUYV的储存数据量是RGB888的数据量的1/2。以损失极小的失真换来一倍的带宽,这是非常划算的。
每个分量的起始地址计算:
Y分量的地址:也就是内存的基地址
U分量的地址: base + 12x5(Y size)
V 分量的地址: base + 12x 5(y size) + 10x5/4(U size)
2. NV12,NV21格式
是一种two-plane模式,即Y和UV分为两个平面。与yuv420p不同的是,UV(CbCr)是交错存储,而不是分为三个平面。

2.4 总结
YUYV:是4:2:2[Y0 U0 Y1 V0]
YUV420:y0u0v0 y1u0v0 y2u0v0 y3u0v0
YUV420P:Y ,U ,V三个分量都是平面格式,也就是说三个分量的内存是连续的。
YUV420SP,Y分量是平面格式,UV是交错存储的。
3.消除冗余
冗余信息是指一帧或者多帧之间的多余信息,比如,一帧图片内的信息,很多都是蓝色,那么是否可以考虑用一个蓝色来编码其他相同颜色的内容呢?比如:一路码流,有连续N帧的内容都是禁止或者变化不大的,那这之间的每帧信息都有大量的重复冗余信息。如果不消除冗余数据,那么数据传输和存储上来说数据量太大了,基本上目前是无法接接受的。所以呢,我们需要对视频进行压缩,进行冗余消除。
3.1怎么消除冗余
前面说了,可以通过压缩视频连续帧数据的方式来减小带宽和储存压力,那么具体是如何有效的压缩的呢?
相关文章:
图像处理简介
目录 基本术语 1 .图像(image) 1.1 像素(Pixel) 1.2 颜色深度(Color Depth) 1.3 分辨率(Resolution) 1.4 像素宽高比(Pixel Aspect Ratio) 1.5 帧率(FPS) 1.6 码率(BR) 1. …...
adb server version (19045) doesn‘t match this client (41); killing.的解决办法
我是因为安装了360手机助手,导致adb版本冲突。卸载之后问题解决 根据这个思路,如果产生"adb server version (19045) doesn’t match this client (41); killing."的错误,检查一下是否有多个版本的adb服务。...
实验室的服务器和本地pycharm怎么做图传
提前说一个 自认为 比较重要的一点: 容器中安装opencv,可以先试试用 apt install libopencv-dev python3-opencv 我感觉在图传的时候用的不是 opencv-python 而是ubuntu的opencv库 所以用 apt install 安装试一下 参考 远程调试 qt.qpa.xcb: coul…...
Vue + Element UI 前端篇(五):国际化实现
Vue Element UI 实现权限管理系统 前端篇(五):国际化实现 国际化支持 1.安装依赖 执行以下命令,安装 i18n 依赖。 yarn add vue-i18n $ yarn add vue-i18n yarn add v1.9.4 warning package-lock.json found. Your project …...
[ROS]虚拟机ubuntu18.04系统里面运行usb_cam
首先安装usb_cam sudo apt-get install ros-melodic-usb-cam 运行: roscore roslaunch usb_cam usb_cam-test.launch 如果一运行报错,首先确认是否存在/dev/video0 可以使用ls /dev/video*查看,如果没有就是没有连接摄像头,…...
常用通讯协议比较
dubbo与http1.0的区别 二进制协议:Dubbo使用自定义的二进制协议,而HTTP 1.0使用文本,发送一条相同的消息,http1.0会有更大的网络开销。 连接复用:Dubbo采用单一的多路复用NIO长链接,每个请求都有一个对应的…...
鼠标键盘管理 ShareMouse for Mac最新
软件“ShareMouse”允许您通过单个鼠标和键盘控制多台计算机: 将鼠标移动到您想要控制的计算机的监视器上,指针会神奇地跳转到该计算机。任何鼠标和键盘输入都会传输到相应的计算机。 与网络KVM类似,ShareMouse通过本地LAN传输鼠标移动和点…...
【ALM工具软件】上海道宁与Perforce为您带来用于整个生命周期的应用程序生命周期管理软件
Helix ALM是 用于整个生命周期的 应用程序生命周期管理的ALM软件 具有专用于 需求管理(Helix RM)、测试用例管理(Helix TCM) 问题管理(Helix IM)的功能模块 Helix ALM提供了 无与伦比的可追溯性 您将…...
Android图形-架构2
目录 引言 组件概述 底层组件: 上层组件: 引言 Android图形架构主要涉及些什么呢? 1)Android 系统级图形架构的基本元素? 2)应用框架和多媒体系统如何使用这些元素? 3)图形数据…...
文字验证码:简单有效的账号安全守卫!
前言 文字验证码不仅是一种简单易懂的验证方式,同时也是保护您的账号安全的重要工具。通过输入正确的文字组合,您可以有效地确认自己的身份,确保只有真正的用户才能访问您的账号。 HTML代码 <script src"https://cdn6.kgcaptcha.…...
Shell 运算符及语法结构
目录 一、Shell运算符 1.1 表达式expr 1.2 运算操作 1.3 操作实例 二、Shell条件判断 2.1 基本语法 2.2 值、权限、类型、多条件判断 三、Shell流程控制 3.1 if 流程语法 3.2 case 流程语法 3.3 for 流程语法 3.4 内部运算符 3.5 while循环流程语法 四、Shell读…...
为什么要建前缀索引?
分析&回答 有一种与索引选择性有关的索引优化策略叫做前缀索引,就是用列的前缀代替整个列作为索引key,当前缀长度合适时,可以做到既使得前缀索引的选择性接近全列索引,同时因为索引key变短而减少了索引文件的大小和维护开销。…...
vite介绍
vite vite是一种新的前端构建工具,vite借助了浏览器对ESM的支持,采用和传统webpack打包完全不一致的unbundle打包机制; vite的快主要体现在两个方面,快速的冷启动和快速的热更新 快速的冷启动:vite只需启动一台静态页…...
2023年软件测试常见面试题
测试花费的成本,要深入在那个环节上,(前提准备上,需求理解上,业务逻辑,排错上,业务名词上理解,通过什么样的方法,有谁能解决这样的问题) 软性热身题 1.自我…...
关于const指针的一个常见误区
关于const,我曾因为其在C和C中的不同,还有一些编译器对未定义的处理不同,搞得晕头转向… 后来有次在阅读《C primer plus》中我终于梳理了有关const的结论。 1.const基础知识 首先要明白const的难点在于修饰指针的时候,对于con…...
@alilclowcode-engine-ext@1.0.5 不支持安装react@^16.3.0
alilclowcode-engine-ext1.0.5 不支持安装react^16.3.0 https://github.com/alibaba/lowcode-demo https://lowcode-engine.cn/site/docs/demoUsage/intro https://github.com/alibaba/lowcode-engine https://docs.appsmith.com/getting-started/setup/installation-guides?…...
Python之列表操作和内存模型
Python之列表操作和内存模型 列表list 一个排列整齐的队伍,Python采用顺序表实现 列表内的个体称作元素,由若干元素组成 列表 元素可以是任意对象(数字、字符串、对象、列表等) 列表内元素有顺序,可以使用索引 线性的数据结构 使用 [ ] …...
实习面试记录
湖南某操作系统中厂(9月) 首先是科研项目相关的问题,然后是其他问题如下: STL中,vector,map和unorded_map底层是怎么实现的? 在C标准库中,vector和map都是基于模板类实现的容器。 vector底层…...
总结/笔记-vue中的插槽(默认插槽、具名插槽、作用域插槽)
问题: 遇到了一个插槽,写法为 #default ”{ row }“ 插槽知识点: 定义 插槽,用于 在组件中 引用外部组件或自定义组件的内容。 即 子组件中提供给父组件使用的一个占位符,父组件可以在这个占位符中填充任何模板代…...
QTday5(QT连接TCP通信)
一、Xmind整理: C语言中的通信协议: 二、上课笔记整理: 1.QT中的服务器端的操作: .pro文件: 头文件: #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include <QTcpServer> //服务…...
龙虎榜——20250610
上证指数放量收阴线,个股多数下跌,盘中受消息影响大幅波动。 深证指数放量收阴线形成顶分型,指数短线有调整的需求,大概需要一两天。 2025年6月10日龙虎榜行业方向分析 1. 金融科技 代表标的:御银股份、雄帝科技 驱动…...
Flask RESTful 示例
目录 1. 环境准备2. 安装依赖3. 修改main.py4. 运行应用5. API使用示例获取所有任务获取单个任务创建新任务更新任务删除任务 中文乱码问题: 下面创建一个简单的Flask RESTful API示例。首先,我们需要创建环境,安装必要的依赖,然后…...
云计算——弹性云计算器(ECS)
弹性云服务器:ECS 概述 云计算重构了ICT系统,云计算平台厂商推出使得厂家能够主要关注应用管理而非平台管理的云平台,包含如下主要概念。 ECS(Elastic Cloud Server):即弹性云服务器,是云计算…...
Oracle查询表空间大小
1 查询数据库中所有的表空间以及表空间所占空间的大小 SELECTtablespace_name,sum( bytes ) / 1024 / 1024 FROMdba_data_files GROUP BYtablespace_name; 2 Oracle查询表空间大小及每个表所占空间的大小 SELECTtablespace_name,file_id,file_name,round( bytes / ( 1024 …...
多模态商品数据接口:融合图像、语音与文字的下一代商品详情体验
一、多模态商品数据接口的技术架构 (一)多模态数据融合引擎 跨模态语义对齐 通过Transformer架构实现图像、语音、文字的语义关联。例如,当用户上传一张“蓝色连衣裙”的图片时,接口可自动提取图像中的颜色(RGB值&…...
自然语言处理——Transformer
自然语言处理——Transformer 自注意力机制多头注意力机制Transformer 虽然循环神经网络可以对具有序列特性的数据非常有效,它能挖掘数据中的时序信息以及语义信息,但是它有一个很大的缺陷——很难并行化。 我们可以考虑用CNN来替代RNN,但是…...
保姆级教程:在无网络无显卡的Windows电脑的vscode本地部署deepseek
文章目录 1 前言2 部署流程2.1 准备工作2.2 Ollama2.2.1 使用有网络的电脑下载Ollama2.2.2 安装Ollama(有网络的电脑)2.2.3 安装Ollama(无网络的电脑)2.2.4 安装验证2.2.5 修改大模型安装位置2.2.6 下载Deepseek模型 2.3 将deepse…...
tomcat入门
1 tomcat 是什么 apache开发的web服务器可以为java web程序提供运行环境tomcat是一款高效,稳定,易于使用的web服务器tomcathttp服务器Servlet服务器 2 tomcat 目录介绍 -bin #存放tomcat的脚本 -conf #存放tomcat的配置文件 ---catalina.policy #to…...
适应性Java用于现代 API:REST、GraphQL 和事件驱动
在快速发展的软件开发领域,REST、GraphQL 和事件驱动架构等新的 API 标准对于构建可扩展、高效的系统至关重要。Java 在现代 API 方面以其在企业应用中的稳定性而闻名,不断适应这些现代范式的需求。随着不断发展的生态系统,Java 在现代 API 方…...
数学建模-滑翔伞伞翼面积的设计,运动状态计算和优化 !
我们考虑滑翔伞的伞翼面积设计问题以及运动状态描述。滑翔伞的性能主要取决于伞翼面积、气动特性以及飞行员的重量。我们的目标是建立数学模型来描述滑翔伞的运动状态,并优化伞翼面积的设计。 一、问题分析 滑翔伞在飞行过程中受到重力、升力和阻力的作用。升力和阻力与伞翼面…...
