图像处理简介
目录
基本术语
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> //服务…...

【Docker】安装RabbitMQ
1、拉取 RabbitMQ 镜像 docker pull rabbitmq2.创建并运行容器 docker run -it --name test-rabbitmq -e RABBITMQ_DEFAULT_USERadmin -e RABBITMQ_DEFAULT_PASSuispig -p 15672:15672 -p 5672:5672 -d rabbitmq参数说明–name是 容器别名-d表示后台运行-p将 宿主机 5672端口…...

【如何获取数据库表的字段并拼接】
获取数据库表的字段并拼接 需求场景操作步骤获取该数据库对应表中所有的字段对获取到的字段进行处理 需求场景 在写sql语句时,我要获取到该表的大部门字段来做处理,一个个粘贴复制太费事了,所以我决定执行sql语句把表中字段查询出来 操作步…...

Oracle中LEFT JOIN后AND与WHERE的异同
1、AND 过滤之后再连接 2、WHERE 连接之后再过滤 下面以具体例子来说明: (1)、建表及插入测试数据 --建测试表 create table FACT_TAB ( ID INTEGER,STATUS VARCHAR2(8) ); create table DIM_STATUS ( STSTUS_CLASS VARCHAR2(8),STATUS_CODE VARCHAR2(8),S…...

Flink实时计算中台Kubernates功能改造点
背景 平台为数据开发人员提供基本的实时作业的管理功能,其中包括jar、sql等作业的在线开发;因此中台需要提供一个统一的SDK支持平台能够实现flink jar作业的发布;绝大多数情况下企业可能会考虑Flink On Yarn的这个发布模式,但是伴随云原生的呼声越来越大,一些企业不希望部…...

GO远程构建并调试
GO远程调试 之前写C,一直习惯了本地IDERemote CMake/GDB编译调试的模式。 因为6.824课程需要用GO,好像没有特别好的支持。记录一下如何配置调试的。 IDE: Goland 操作系统:Windows 远程服务器:Ubuntu 首先配置SSH,让其可以连接到…...

react使用hook封装一个search+input+checkbox组件
目录 react使用hook封装一个searchinputcheckbox组件searchPro.jsx使用组件效果 react使用hook封装一个searchinputcheckbox组件 searchPro.jsx import { Checkbox, Input } from "antd"; import React, { useEffect, useState } from "react"; import S…...

【6】uniform颜色写入
之前的Basic.shader: #shader vertex #version 330 corelayout(location 0) in vec4 position;void main() {gl_Position position; };#shader fragment #version 330 corelayout(location 0) out vec4 color;void main() {color vec4(1.0, 0.0, 0.0, 1.0); };这里color …...

自然语言处理历史史诗:NLP的范式演变与Python全实现
目录 一、引言什么是自然语言处理?语言与人类思维自然语言的复杂性NLP的历史轨迹 二、20世纪50年代末到60年代的初创期符号学派重要的研究和突破 随机学派重要的研究和突破 三、20世纪70年代到80年代的理性主义时代基于逻辑的范式重要的研究和突破 基于规则的范式重…...

网络协议从入门到底层原理学习(二)—— Mac地址/IP地址
文章目录 网络协议从入门到底层原理学习(二)—— Mac地址/IP地址1、MAC地址2、MAC地址的表示格式3、MAC地址表4、MAC地址操作5、MAC地址的获取6、ARP7、ICMP8、IP地址9、IP地址的分类和格式10、不同分类的IP地址的范围11、特殊 IP 地址12、子网掩码13、子…...

2023开学礼中国海洋大学《乡村振兴战略下传统村落文化旅游设计》许少辉新海洋图书馆
2023开学礼中国海洋大学《乡村振兴战略下传统村落文化旅游设计》许少辉新海洋图书馆...