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

视频编解码学习7之视频编码简介

视频编码技术发展历程与主流编码标准详解

视频编码技术是现代数字媒体领域的核心技术之一,它通过高效的压缩算法大幅减少了视频数据的体积,使得视频的存储、传输和播放变得更加高效和经济。从早期的H.261标准到最新的AV1和H.266/VVC,视频编码技术经历了数十年的发展演进,压缩效率提高了数十倍。本文将全面介绍视频编码技术的发展历史、基本原理以及所有主流编码技术的详细特点,包括H.26x系列、MPEG系列以及新兴的AV1等开放标准,帮助读者深入理解这一关键技术领域的发展脉络和技术特点。

视频编码技术概述与发展历程

视频编码技术是指通过特定算法对原始视频数据进行压缩处理,以减少存储空间和传输带宽需求的技术。自20世纪80年代以来,视频编码技术经历了从简单压缩到高效智能编码的演进过程,其发展动力主要来源于对更高压缩效率更好视频质量的不懈追求。

视频编码技术的发展历程可以清晰地划分为几个重要阶段:

  • 1980年代-早期标准诞生:这一时期诞生了H.261标准,它是首个实用的视频编码标准,专为ISDN网络上的视频会议设计,采用了基于运动补偿的帧间预测和DCT变换的混合编码框架,奠定了后续标准的基础架构159。同时期,MPEG组织也开始制定用于存储媒体的压缩标准。

  • 1990年代-标准分化发展:ITU-T推出了H.263标准,针对低码率应用进行了优化;而ISO/IEC的MPEG组织则发布了MPEG-1(用于VCD)、MPEG-2(用于DVD和数字电视)等标准。这一时期的特点是标准分化,针对不同应用场景发展出不同的编码技术16。

  • 2000年代-统一与高效:H.264/AVC标准的出现标志着视频编码技术进入成熟期,它由ITU-T和ISO/IEC联合制定,在压缩效率上实现了重大突破,比H.263提高了约50%的压缩率,成为互联网视频的事实标准236。

  • 2010年代-高清与智能:随着4K/8K视频的普及,H.265/HEVC应运而生,它进一步提高了压缩效率,支持更高分辨率的视频。同时,谷歌主导的VP9和开放媒体联盟的AV1等免版税标准开始挑战传统专利标准23。

  • 2020年代-智能与沉浸:最新的H.266/VVC和AV1等标准开始支持更智能的内容感知编码,为元宇宙、VR/AR等沉浸式应用提供技术基础310。

视频编码技术的基本原理是去除视频数据中的冗余信息,主要包括三种类型的冗余:

  1. 空间冗余:图像相邻像素之间的相关性,可以通过帧内预测和变换编码来消除68。

  2. 时间冗余:视频序列中相邻帧之间的相似性,通过运动估计和运动补偿技术来减少68。

  3. 统计冗余:数据本身的概率分布不均匀性,通过熵编码(如哈夫曼编码、算术编码)来压缩78。

此外,编码技术还利用人类视觉系统(HVS)的特性,去除人眼不敏感的视觉冗余信息,如对色度信息采用比亮度信息更低的采样率8。

表:视频编码技术发展里程碑

年代标准主要特点典型应用
1984-1990H.261首个实用视频编码标准,混合编码框架ISDN视频会议
1990-1995MPEG-1, H.263支持CD-ROM视频,改进低码率性能VCD, 视频电话
1995-2003MPEG-2, MPEG-4支持数字电视,引入基于对象编码DVD, 数字电视
2003-2013H.264/AVC压缩效率提高50%,网络友好互联网视频, HDTV
2013-2020H.265/HEVC, VP9支持4K/8K,压缩效率再提高50%UHDTV, 流媒体
2020-至今H.266/VVC, AV1智能编码,支持VR/AR元宇宙, 沉浸式媒体

随着技术的进步,视频编码标准不仅在压缩效率上持续提升,在功能上也越来越丰富,从单纯的压缩工具发展为支持可伸缩编码错误恢复内容交互等高级特性的多媒体处理平台36。同时,编码标准的制定也从最初的专有技术逐步走向开放协作,AV1等开放标准的出现为行业带来了新的发展机遇2。

早期视频编码标准:H.261与MPEG-1

视频编码技术的标准化进程始于20世纪80年代末,当时数字视频应用开始从专业领域向商业和消费领域扩展。H.261和MPEG-1作为最早的两个重要视频编码标准,奠定了现代视频压缩技术的基础框架,其影响一直延续至今。

H.261:视频编码的奠基者

H.261标准由ITU-T(国际电信联盟电信标准化部门)于1988年制定完成,1990年正式批准,是第一个实用化的视频编码标准。它专为ISDN(综合业务数字网)上的视频会议和可视电话应用设计,目标码率为p×64kbit/s(p=1~30),因此也被称为"p×64"标准159。

H.261的技术创新主要体现在以下几个方面:

  1. 混合编码框架:H.261首次将帧间预测变换编码结合起来,形成了经典的"预测+变换"混合编码架构。这一框架被后续几乎所有视频编码标准所继承17。具体流程包括:运动补偿的帧间预测、DCT变换、量化和熵编码。

  2. 基于块的处理:H.261将图像划分为16×16像素的宏块(Macroblock),这是视频编码中块处理概念的起源。每个宏块可以独立选择使用帧内编码或帧间编码模式59。

  3. 运动补偿技术:为了去除时间冗余,H.261引入了运动估计和运动补偿技术,通过寻找相邻帧中相似块的位置偏移(运动矢量),只编码残差部分79。

  4. DCT变换:对残差数据或帧内块进行8×8离散余弦变换(DCT),将空域信号转换到频域,使能量集中在少数低频系数上,便于后续量化压缩15。

H.261仅支持两种图像格式:QCIF(176×144)和CIF(352×288),且运动估计精度只到整像素级别,没有B帧(双向预测帧)概念,只有I帧(帧内编码帧)和P帧(前向预测帧)69。尽管以今天的标准看,H.261的压缩效率不高,但它确立了视频编码的基本方法论,其技术框架影响深远。

MPEG-1:面向存储媒体的编码标准

MPEG-1是ISO/IEC的运动图像专家组(MPEG)于1993年发布的视频编码标准,主要针对CD-ROM等存储媒体上的视频播放应用,典型码率为1.2Mbit/s左右,能够提供30帧CIF(352×288)质量的图像159。

MPEG-1在H.261的基础上进行了多项重要改进:

  1. 引入B帧:MPEG-1新增了双向预测帧(B帧),可以同时参考前后帧进行预测,显著提高了压缩效率。B帧的使用是MPEG-1相比H.261压缩效率提升的关键因素之一16。

  2. 更灵活的GOP结构:MPEG-1定义了图像组(GOP,Group of Pictures)的概念,允许在I帧和P帧之间插入多个B帧,形成如IBBPBBPBB...的编码结构68。

  3. 半像素运动估计:将运动估计的精度从H.261的整像素提高到半像素级别,使运动补偿更加精确,残差数据更小19。

  4. D帧:MPEG-1还引入了直流帧(D帧),只编码块的DC系数,用于快速预览等特殊应用5。

MPEG-1标准分为系统、视频和音频三部分,其中第二部分是视频编码规范。它最初是为VCD(视频光盘)设计的,但也广泛应用于早期的网络视频。MPEG-1的一个显著特点是编解码复杂度不对称,编码比解码复杂得多,这符合存储应用的特点15。

表:H.261与MPEG-1主要技术参数对比

技术特性H.261MPEG-1
制定组织ITU-TISO/IEC MPEG
发布时间19901993
目标应用视频会议CD-ROM视频
典型码率p×64kbit/s (p=1~30)1.2Mbit/s
图像格式QCIF, CIFCIF
帧类型I帧, P帧I帧, P帧, B帧
运动估计精度整像素半像素
关键技术DCT变换, 运动补偿引入B帧, GOP结构

早期标准的局限性与影响

尽管H.261和MPEG-1取得了巨大成功,但随着应用需求的增长,它们逐渐暴露出一些局限性:

  1. 压缩效率有限:受当时技术条件限制,早期标准的压缩率相对较低,H.261在低码率下图像质量较差,MPEG-1的1.2Mbit/s码率也难以满足更高画质需求15。

  2. 功能单一:这些标准主要针对特定应用设计(H.261用于视频会议,MPEG-1用于存储播放),缺乏灵活性和可扩展性9。

  3. 分辨率支持有限:最高只支持CIF(352×288)分辨率,无法满足后来出现的标准清晰度电视(SDTV)和高清晰度电视(HDTV)需求16。

然而,H.261和MPEG-1确立的混合编码框架——运动补偿预测加变换编码——成为后续所有主流视频编码标准的基础。据估计,现代视频编码标准如H.264/AVC和H.265/HEVC中,约有70%的技术可以追溯到H.261最初的设计理念7。这种技术框架的持久生命力证明了早期标准设计的合理性和前瞻性。

随着多媒体应用的普及,用户对视频质量的要求不断提高,推动着视频编码技术向更高效率、更多功能的方向发展,直接催生了MPEG-2、H.263等后续标准159。

视频编码技术成熟期:H.263与MPEG-2/4

随着多媒体应用的普及和数字电视的兴起,1990年代中期至2000年代初,视频编码技术进入快速发展阶段。这一时期出现了多个重要标准,包括ITU-T的H.263系列和ISO/IEC的MPEG-2、MPEG-4标准,它们在压缩效率、功能丰富性和应用范围等方面都有显著提升,为现代数字视频产业奠定了基础。

H.263:低码率视频通信标准

H.263是ITU-T于1995年制定的视频编码标准,最初目标是面向极低码率应用(小于64kbit/s),如PSTN网络上的视频电话159。然而随着技术发展,H.263及其后续版本(H.263+、H.263++)逐渐演变为支持全码率应用的通用标准。

H.263在H.261基础上引入了多项技术创新:

  1. 半像素运动补偿:运动矢量精度提高到半像素级别,使预测更加精确,显著减少了预测残差16。

  2. PB帧模式:允许将两个帧(P帧和B帧)编码为一个单元,提高编码效率59。

  3. 更多图像格式:支持Sub-QCIF(128×96)、QCIF(176×144)、CIF(352×288)、4CIF(704×576)甚至16CIF(1408×1152)等多种格式,应用范围更广16。

  4. 非限制运动矢量:允许运动矢量指向图像边界外的参考像素,通过边缘扩展技术实现,提高了边缘宏块的预测效率5。

  5. 高级预测模式:包括重叠块运动补偿(OBMC)和四个运动矢量模式(每个宏块可以使用四个8×8块的运动矢量而非一个16×16矢量)59。

H.263标准设计非常灵活,包含大量可选功能,这使得它能够通过不同的配置适应从极低码率(28.8kbit/s调制解调器)到较高码率(数Mbit/s)的各种应用场景1。然而,过多的选项也导致H.263实现复杂,不同设备间的互操作性成为挑战,这一问题在H.263+和H.263++中更为突出59。

MPEG-2:数字电视的基石

MPEG-2标准于1995年发布,是MPEG-1的扩展和完善,主要针对数字电视高清晰度视频应用16。它保持了与MPEG-1的向后兼容性,同时在多个方面进行了重要增强:

  1. 支持隔行扫描视频:MPEG-2明确区分"帧"(渐进扫描)和"场"(隔行扫描)的概念,在场编码模式下,可以对顶场和底场分别进行运动补偿预测16。

  2. 更高的分辨率支持:MPEG-2支持从低分辨率(352×288)到高清晰度(1920×1080)的多种图像格式,满足从VCD到HDTV的不同需求6。

  3. 可分级编码:引入空间可分级性、时间可分级性和信噪比(SNR)可分级性,允许从一个码流中提取不同质量的子码流,适应不同的网络条件和终端能力15。

  4. 更精细的量化控制:MPEG-2采用更精细的量化步长调整策略,支持非线性量化矩阵,更好地适应人类视觉特性6。

  5. 传输流与节目流:MPEG-2系统层定义了两种复用格式:传输流(TS)用于易错环境如广播,节目流(PS)用于无误码环境如存储媒体,这一设计极大促进了数字电视的发展1。

MPEG-2视频部分(第二部分)的技术规范与ITU-T的H.262标准完全相同,是两大标准化组织合作的成果15。MPEG-2取得了巨大商业成功,广泛应用于数字卫星电视、有线数字电视、DVD视频以及后来的地面数字电视等领域。即使在今天,虽然压缩效率已被新一代标准超越,MPEG-2仍在许多传统广播系统中使用6。

MPEG-4:基于对象的编码革命

MPEG-4(第二部分)标准于1999年发布,代表了视频编码理念的重大转变——从基于帧的编码转向基于对象的编码159。其核心思想是将视频场景视为由多个音频视频对象(AVO,Audio-Visual Object)组成,每个对象可以独立编码、传输和组合,从而实现高度交互性。

MPEG-4的主要技术创新包括:

  1. 基于对象的编码:支持对场景中的不同对象(如前景人物和背景)分别编码,用户可以选择性地解码和操作特定对象14。

  2. 形状编码:为每个视频对象定义透明度形状信息,并对其进行高效编码,这是实现对象分离的基础45。

  3. 精灵编码:针对背景等静态或准静态对象,采用精灵(Sprite)编码技术,将整个背景作为一张大图传输,然后只传送相机运动参数5。

  4. 可伸缩性增强:提供比MPEG-2更灵活的可分级编码方式,支持精细粒度可伸缩性(FGS)编码1。

  5. 人脸与身体动画:定义参数化的人脸和身体动画模型,可以用极低的码率驱动虚拟人物5。

尽管MPEG-4的基于对象编码理念极具前瞻性,但由于技术复杂度和实现难度较高,这部分功能在实际应用中并未广泛普及19。相反,MPEG-4的简单档次(Simple Profile)和高级简单档次(Advanced Simple Profile)等基于传统帧编码的部分得到了广泛应用,特别是在网络视频和移动视频领域56。

MPEG-4还引入了DRM支持交互性等特性,使其成为第一个真正意义上的多媒体框架标准,而不仅仅是视频编码标准5。然而,MPEG-4的专利授权政策较为复杂且费用较高,这在一定程度上限制了它的普及6。

表:H.263、MPEG-2与MPEG-4主要特性对比

特性H.263系列MPEG-2MPEG-4(第二部分)
主要目标低码率视频通信数字电视与存储多媒体交互与低码率
核心技术半像素运动估计,PB帧隔行扫描处理,可分级编码基于对象的编码,形状编码
典型应用视频会议,可视电话DVD,数字电视网络视频,移动视频
压缩效率比H.261提高30-50%与MPEG-1相当(同质量下码率减半)比MPEG-1提高约50%
创新特点灵活选项多,适应性强传输流,广播友好

相关文章:

视频编解码学习7之视频编码简介

视频编码技术发展历程与主流编码标准详解 视频编码技术是现代数字媒体领域的核心技术之一,它通过高效的压缩算法大幅减少了视频数据的体积,使得视频的存储、传输和播放变得更加高效和经济。从早期的H.261标准到最新的AV1和H.266/VVC,视频编码…...

LeetCode 热题 100 19. 删除链表的倒数第 N 个结点

LeetCode 热题 100 | 19. 删除链表的倒数第 N 个结点 大家好,今天我们来解决一道经典的链表问题——删除链表的倒数第 N 个结点。这道题在 LeetCode 上被标记为中等难度,要求删除链表的倒数第 n 个结点,并返回链表的头结点。 问题描述 给你…...

【Java ee初阶】网络编程 UDP socket

网络编程 socket api 是传输层提供的api。 UDP 无连接,不可靠传输,面向数据报,全双工。 TCP 有链接,可靠传输,面向字节流,全双工。 UDP socket api 数据报 DatagrammSocket 代表了操作系统中的socket文…...

旅游推荐数据分析可视化系统算法

旅游推荐数据分析可视化系统算法 本文档详细介绍了旅游推荐数据分析可视化系统中使用的各种算法,包括推荐算法、数据分析算法和可视化算法。 目录 推荐算法 基于用户的协同过滤推荐基于浏览历史的推荐主题推荐算法 亲子游推荐算法文化游推荐算法自然风光推荐算法…...

c语言第一个小游戏:贪吃蛇小游戏08(贪吃蛇完结)

贪吃蛇撞墙和想不开咬死自己 #include <curses.h> #include <stdlib.h> struct snake{ int hang; int lie; struct snake *next; }; struct snake food; struct snake *head; struct snake *tail; int key; int dir; #define UP 1 #define DOWN -1 …...

使用PhpStudy搭建Web测试服务器

一、安装PhpStudy 从以下目录下载PhpStudy安装文件 Windows版phpstudy下载 - 小皮面板(phpstudy) (xp.cn) 安装成功之后打开如下界面 点击启动Apache 查看网站地址 在浏览器中输入localhost:88,出现如下页面就ok了 二、与Unity交互 1.配置下载文件路径&#xff0c;点击…...

c语言第一个小游戏:贪吃蛇小游戏06

实现贪吃蛇四方向的风骚走位 实现代码 #include <curses.h> #include <stdlib.h> struct snake{ int hang; int lie; struct snake *next; }; struct snake *head; struct snake *tail; int key; int dir; //全局变量 #define UP 1 //这个是宏定义&a…...

Qt应用程序启动时的一些思路:从单实例到性能优化的处理方案

程序启动时优化的价值 在桌面软件开发领域&#xff0c;应用程序的启动过程就像音乐的序曲&#xff0c;决定了用户对软件品质的第一印象。比如首次启动等待超过3秒时&#xff0c;会让大多数用户产生负面看法&#xff0c;而专业工具软件的容忍阈值甚至更低。Qt框架作为跨平台开发…...

【前端三剑客】Ajax技术实现前端开发

目录 一、原生AJAX 1.1AJAX 简介 1.2XML 简介 1.3AJAX 的特点 1.3.1AJAX 的优点 1.3.2AJAX 的缺点 1.4AJAX 的使用 1.4.1核心对象 1.4.2使用步骤 1.4.3解决IE 缓存问题 1.4.4AJAX 请求状态 二、jQuery 中的AJAX 2.1 get 请求 2.2 post 请求 三、跨域 3.1同源策略…...

一文详解Spring Boot如何配置日志

一、写在前面 对于日志文件&#xff0c;相信大家都并不陌生&#xff0c;通过在关键位置打印相关的日志&#xff0c;有利于快速跟踪和定位软件系统运行中存在的问题。 在之前的 Java 实现日志记录的文章中&#xff0c;我们介绍了能实现日志记录的主流框架有 Log4j、Log4j2、Lo…...

Springboot | 如何上传文件

文章目录 1. 核心上传逻辑&#xff1a;FileUploadController2. 使文件系统中的文件可通过 HTTP 访问&#xff1a;WebConfig3. 安全性配置&#xff1a;WebSecurityConfig4. 前端实现&#xff08;这里用的是Angular&#xff09; 在许多应用程序开发中&#xff0c;我们经常需要实现…...

axios结合AbortController取消文件上传

<template><div><input type"file" multiple change"handleFileUpload" /><button click"cancelUpload" :disabled"!isUploading">取消上传</button><div>总进度&#xff1a;{{ totalProgress }}…...

spring中的@Async注解详解

一、核心功能与作用 Async 是Spring框架提供的异步方法执行注解&#xff0c;用于将方法标记为异步任务&#xff0c;使其在独立线程中执行&#xff0c;从而提升应用的响应速度和吞吐量。其主要作用包括&#xff1a; 非阻塞调用&#xff1a;主线程调用被标记方法后立即返回&…...

MyBatis 报错:Column count doesn‘t match value count at row 1 详解与解决

本文适用于使用 MyBatis MySQL 开发中出现 “Column count doesnt match value count at row 1” 报错的朋友&#xff0c;尤其是在批量插入或更新数据时&#xff0c;遇到 XML 映射文件中 insert 标签报错的问题。 一、遇到的问题&#xff1a; 二、错误原因分析 列数与值数量不…...

第四天——贪心算法——种花

1. 题目 有一个花坛&#xff0c;其中0 表示该位置是空的&#xff0c;可以种花。1 表示该位置已经有花&#xff0c;不能种花。 规则&#xff1a;新种的花不能种在相邻的位置&#xff08;即如果某个位置已经种了花&#xff0c;它的左右两个相邻位置不能再种花&#xff09;。给定…...

【人工智能】自然语言编程革命:腾讯云CodeBuddy实战5步搭建客户管理系统,效率飙升90%

CodeBuddy 导读一、产品介绍1.1 **什么是腾讯云代码助手&#xff1f;**1.2 插件安装1.2.1 IDE版本要求1.2.2 注意事项1.2.4 插件安装1.2.4.1 环境安装1.2.4.2 安装腾讯云AI代码助手** 1.2.5 功能介绍1.2.5.1 Craft&#xff08;智能代码生成&#xff09;1.2.5.2 Chat&#xff08…...

麦肯锡110页PPT企业组织效能提升调研与诊断分析指南

“战略清晰、团队拼命、资源充足&#xff0c;但业绩就是卡在瓶颈期上不去……”这是许多中国企业面临的真实困境。表面看似健康的企业&#xff0c;往往隐藏着“组织亚健康”问题——跨部门扯皮、人才流失、决策迟缓、市场反应滞后……麦肯锡最新研究揭示&#xff1a;组织健康度…...

【MySQL】第二弹——MySQL表的增删改查(CRUD)初阶

文章目录 &#x1f393;一. CRUD&#x1f393;二. 新增(Create)&#x1f393;三. 查询(Rertieve)&#x1f4d6;1. 全列查询&#x1f4d6;2. 指定列查询&#x1f4d6;3. 查询带有表达式&#x1f4d6;4. 起别名查询(as )&#x1f4d6; 5. 去重查询(distinct)&#x1f4d6;6. 排序…...

内存、磁盘、CPU区别,Hadoop/Spark与哪个联系密切

1. 内存、磁盘、CPU的区别和作用 1.1 内存&#xff08;Memory&#xff09; 作用&#xff1a; 内存是计算机的短期存储器&#xff0c;用于存储正在运行的程序和数据。它的访问速度非常快&#xff0c;比磁盘快几个数量级。在分布式计算中&#xff0c;内存用于缓存中间结果、存储…...

hz2新建Keyword页面

新建一个single-keywords.php即可&#xff0c;需要筛选项再建taxonomy-knowledge-category.php 参考&#xff1a;https://www.tkwlkj.com/customize-wordpress-category-pages.html WordPress中使用了ACF创建了自定义产品分类products&#xff0c;现在想实现自定义产品分类下的…...

离散制造企业WMS+MES+QMS+条码管理系统高保真原型全解析

在离散型制造企业的生产过程中&#xff0c;库存管理混乱、生产进度不透明、质检流程繁琐等问题常常成为制约企业发展的瓶颈。为了帮助企业实现全流程数字化管控&#xff0c;我们精心打造了一款基于离散型制造企业&#xff08;涵盖单件生产、批量生产、混合生产模式&#xff09;…...

【并发编程基石】CAS无锁算法详解:原理、实现与应用场景

一、什么是CAS&#xff1f; CAS&#xff08;Compare-And-Swap&#xff09; 是现代并发编程的核心算法之一&#xff0c;它通过处理器指令级的原子操作实现线程安全&#xff0c;无需传统锁机制。其核心逻辑可以用一个公式表示&#xff1a; CAS(V, E, N) {if (V E) { // 比较当…...

(自用)Java学习-5.8(总结,springboot)

一、MySQL 数据库 表关系 一对一、一对多、多对多关系设计外键约束与级联操作 DML 操作 INSERT INTO table VALUES(...) DELETE FROM table WHERE... UPDATE table SET colval WHERE...DQL 查询 基础查询&#xff1a;SELECT * FROM table WHERE...聚合函数&#xff1a;COUNT()…...

GOOSE 协议中MAC配置

在 GOOSE&#xff08;Generic Object Oriented Substation Event&#xff09;协议中&#xff0c;主站&#xff08;Publisher&#xff09;发送的 MAC 地址不需要与从站&#xff08;Listener&#xff09;的 MAC 地址一致&#xff0c;其通信机制与 MAC 地址的匹配逻辑取决于 GOOSE…...

机器学习之决策树与决策森林:机器学习中的强大工具

机器学习之决策树与决策森林&#xff1a;机器学习中的强大工具 摘要&#xff1a;本文深入探讨决策树和决策森林在机器学习中的应用优势及其适用场景。决策树凭借其易于配置、原生处理多种数据类型、鲁棒性及可解释性等特点&#xff0c;在小数据集和表格数据处理方面表现卓越。…...

【Redis】谈谈Redis的设计

Redis&#xff08;Remote Dictionary Service&#xff09;是一个高性能的内存键值数据库&#xff0c;其设计核心是速度、简单性和灵活性。以下从架构、数据结构、持久化、网络模型等方面解析 Redis 的设计实现原理&#xff1a; 1. 核心设计思想 内存优先&#xff1a;数据主要存…...

【C++】流(Stream)详解:标准流、文件流和字符串流

【C】流(Stream)详解&#xff1a;标准流、文件流和字符串流 在C编程中&#xff0c;流(Stream)是一个非常重要的概念&#xff0c;它为我们提供了统一的数据输入输出接口。本文将详细介绍C中的三种主要流类型&#xff1a;标准流、文件流和字符串流。 一、标准流(Standard Strea…...

基于 Spring Boot 瑞吉外卖系统开发(十三)

基于 Spring Boot 瑞吉外卖系统开发&#xff08;十三&#xff09; 查询套餐 在查询套餐信息时包含套餐的分类名&#xff0c;分类名称在category表中&#xff0c;因此这里需要进行两表关联查询。 自定义SQL如下&#xff1a; select s.* ,c.name as category_name from setmeal…...

POSE识别 神经网络

Pose 识别模型介绍 Pose 识别是计算机视觉领域的一个重要研究方向&#xff0c;其目标是从图像或视频中检测出人体的关键点位置&#xff0c;从而估计出人体的姿态。这项技术在许多领域都有广泛的应用&#xff0c;如动作捕捉、人机交互、体育分析、安防监控等。 Pose 识别模型的…...

CSS3 基础知识、原理及与CSS的区别

CSS3 基础知识、原理及与CSS的区别 CSS3 基础知识 CSS3 是 Cascading Style Sheets 的第3个版本&#xff0c;是CSS技术的升级版本&#xff0c;于1999年开始制订&#xff0c;2001年5月23日W3C完成了CSS3的工作草案。 CSS3 主要模块 选择器&#xff1a;更强大的元素选择方式盒…...