当前位置: 首页 > news >正文

图像处理简介

目录

基本术语

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)图形数据…...

文字验证码:简单有效的账号安全守卫!

前言 文字验证码不仅是一种简单易懂的验证方式&#xff0c;同时也是保护您的账号安全的重要工具。通过输入正确的文字组合&#xff0c;您可以有效地确认自己的身份&#xff0c;确保只有真正的用户才能访问您的账号。 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读…...

为什么要建前缀索引?

分析&回答 有一种与索引选择性有关的索引优化策略叫做前缀索引&#xff0c;就是用列的前缀代替整个列作为索引key&#xff0c;当前缀长度合适时&#xff0c;可以做到既使得前缀索引的选择性接近全列索引&#xff0c;同时因为索引key变短而减少了索引文件的大小和维护开销。…...

vite介绍

vite vite是一种新的前端构建工具&#xff0c;vite借助了浏览器对ESM的支持&#xff0c;采用和传统webpack打包完全不一致的unbundle打包机制&#xff1b; vite的快主要体现在两个方面&#xff0c;快速的冷启动和快速的热更新 快速的冷启动&#xff1a;vite只需启动一台静态页…...

2023年软件测试常见面试题

测试花费的成本&#xff0c;要深入在那个环节上&#xff0c;&#xff08;前提准备上&#xff0c;需求理解上&#xff0c;业务逻辑&#xff0c;排错上&#xff0c;业务名词上理解&#xff0c;通过什么样的方法&#xff0c;有谁能解决这样的问题&#xff09; 软性热身题 1.自我…...

关于const指针的一个常见误区

关于const&#xff0c;我曾因为其在C和C中的不同&#xff0c;还有一些编译器对未定义的处理不同&#xff0c;搞得晕头转向… 后来有次在阅读《C primer plus》中我终于梳理了有关const的结论。 1.const基础知识 首先要明白const的难点在于修饰指针的时候&#xff0c;对于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 一个排列整齐的队伍&#xff0c;Python采用顺序表实现 列表内的个体称作元素&#xff0c;由若干元素组成 列表 元素可以是任意对象(数字、字符串、对象、列表等) 列表内元素有顺序&#xff0c;可以使用索引 线性的数据结构 使用 [ ] …...

实习面试记录

湖南某操作系统中厂&#xff08;9月&#xff09; 首先是科研项目相关的问题&#xff0c;然后是其他问题如下&#xff1a; STL中&#xff0c;vector,map和unorded_map底层是怎么实现的&#xff1f; 在C标准库中&#xff0c;vector和map都是基于模板类实现的容器。 vector底层…...

总结/笔记-vue中的插槽(默认插槽、具名插槽、作用域插槽)

问题&#xff1a; 遇到了一个插槽&#xff0c;写法为 #default ”{ row }“ 插槽知识点&#xff1a; 定义 插槽&#xff0c;用于 在组件中 引用外部组件或自定义组件的内容。 即 子组件中提供给父组件使用的一个占位符&#xff0c;父组件可以在这个占位符中填充任何模板代…...

QTday5(QT连接TCP通信)

一、Xmind整理&#xff1a; C语言中的通信协议&#xff1a; 二、上课笔记整理&#xff1a; 1.QT中的服务器端的操作&#xff1a; .pro文件&#xff1a; 头文件&#xff1a; #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include <QTcpServer> //服务…...

LangChain4j的AiServices到底怎么用?一个注解让SpringBoot服务秒变AI智能体

LangChain4j的AiServices深度实践&#xff1a;用声明式编程重构SpringBoot智能服务 在Java生态中集成大语言模型&#xff08;LLM&#xff09;时&#xff0c;开发者常常面临一个架构难题&#xff1a;如何在保持代码整洁的同时&#xff0c;优雅地组织AI能力&#xff1f;LangChain…...

别再死记硬背API了!用这3个真实JS开发案例,带你玩转泛微Ecology9前端定制

别再死记硬背API了&#xff01;用这3个真实JS开发案例&#xff0c;带你玩转泛微Ecology9前端定制 在泛微Ecology9的二次开发中&#xff0c;许多前端开发者都会遇到一个共同的痛点&#xff1a;面对庞大的API文档无从下手&#xff0c;每次开发都要反复查阅手册&#xff0c;效率低…...

快速部署PyTorch 2.5:预装CUDA环境实战教程

快速部署PyTorch 2.5&#xff1a;预装CUDA环境实战教程 本文是一篇基础教程类文章&#xff0c;旨在帮助开发者快速上手使用预装了PyTorch 2.5和CUDA环境的深度学习镜像。无论你是刚接触深度学习的新手&#xff0c;还是需要快速搭建开发环境的老手&#xff0c;这篇教程都能让你…...

3秒守护隐私:Boss-Key重新定义窗口智能管理

3秒守护隐私&#xff1a;Boss-Key重新定义窗口智能管理 【免费下载链接】Boss-Key 老板来了&#xff1f;快用Boss-Key老板键一键隐藏静音当前窗口&#xff01;上班摸鱼必备神器 项目地址: https://gitcode.com/gh_mirrors/bo/Boss-Key 在数字化办公环境中&#xff0c;窗…...

OpenClaw隐私保护:QwQ-32B本地化部署数据边界控制

OpenClaw隐私保护&#xff1a;QwQ-32B本地化部署数据边界控制 1. 为什么需要关注OpenClaw的数据边界 去年我在帮一个法律团队搭建自动化文档处理系统时&#xff0c;第一次深刻意识到数据边界的重要性。他们处理的案件材料包含大量敏感信息&#xff0c;任何数据泄露都可能造成…...

在线客服系统源码 | 支持PC管理端+H5访客端+实时聊天

这是一个在线客服系统项目&#xff0c;包含三个主要部分&#xff1a;后端API服务器、PC端管理系统和H5端客服系统。以下是各部分的详细介绍&#xff1a; 1. 后端API服务器 主要功能&#xff1a;用户认证&#xff1a;管理员登录验证快捷回复管理&#xff1a;创建、读取、更新、删…...

3分钟掌握Mermaid:用代码思维绘制专业图表的核心技巧

3分钟掌握Mermaid&#xff1a;用代码思维绘制专业图表的核心技巧 【免费下载链接】mermaid mermaid-js/mermaid: 是一个用于生成图表和流程图的 Markdown 渲染器&#xff0c;支持多种图表类型和丰富的样式。适合对 Markdown、图表和流程图以及想要使用 Markdown 绘制图表和流程…...

5步搞定Jimeng LoRA部署:轻量文生图测试系统快速上手

5步搞定Jimeng LoRA部署&#xff1a;轻量文生图测试系统快速上手 1. 项目概述与核心优势 Jimeng LoRA是一款专为LoRA模型测试优化的轻量化文本生成图像系统。基于Z-Image-Turbo底座构建&#xff0c;它实现了单次底座加载、动态LoRA热切换的创新功能&#xff0c;大幅提升了模型…...

Tessent Shell双Pass插入策略深度解读:为什么MemoryBIST要先于EDT/OCC插入?

Tessent Shell双Pass插入策略&#xff1a;MemoryBIST优先于EDT/OCC的技术本质解析 在芯片测试领域&#xff0c;Tessent Shell的双Pass插入流程&#xff08;Two-Pass Insertion Process&#xff09;是一个被广泛采用却鲜少深入探讨的核心方法论。当工程师首次接触"先Memory…...

零代码玩转珞石机械臂:用图形化编程实现咖啡拉花全流程(附配置文件)

零代码玩转珞石机械臂&#xff1a;用图形化编程实现咖啡拉花全流程&#xff08;附配置文件&#xff09; 在精品咖啡文化蓬勃发展的今天&#xff0c;一杯带有精美拉花的拿铁不仅能提升产品附加值&#xff0c;更能为顾客创造独特的消费体验。但对于大多数独立咖啡店主而言&#…...