音视频学习–关于绿屏的6种检测方案

2023-10-29 18:50

本文主要是介绍音视频学习–关于绿屏的6种检测方案,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1. 问题背景

最近和网友聊天时被问道绿屏问题,类似这样的效果:

本文福利, 免费领取C++音视频学习资料包、技术视频/代码,内容包括(音视频开发,面试题,FFmpeg ,webRTC ,rtmp ,hls ,rtsp ,ffplay ,编解码,推拉流,srs)↓↓↓↓↓↓见下面↓↓文章底部点击免费领取↓↓

2. 问题分析

其实绿屏本质就是yuv数据为0了,导致yuv转换为rgb时候成为全绿的颜色。

其实绿屏本质就是yuv数据为0了,导致yuv转换为rgb时候成为全绿的颜色。

YUV和RGB的转换:Y = 0.299 R + 0.587 G + 0.114 BU = -0.1687 R - 0.3313 G + 0.5 B + 128V = 0.5 R - 0.4187 G - 0.0813 B + 128R = Y + 1.402 (V-128)G= Y - 0.34414 (U-128) - 0.71414 (V-128)B= Y + 1.772 (U-128)

如果将yuv都是0带入到上面公式:

R = 1.402 * (-128) = -126.598G = -0.34414(-128) - 0.71414(-128) = 44.04992 + 91.40992 = 135.45984B = 1.772 * (-128) = -126.228

差不多就是R = -126, G = 135, B = -126
其中RGB有取值范围, 都是[0, 255]
所以最后就是R=0, G=135, B=0
查看颜色表:rgb(0,135,0) 差不多就是绿色

而我们解码时yuv初始化就是默认都是0值,这个就是绿屏的显示主要原因。

所以我们要解决绿屏问题主要两个方向:

(1)yuv数据为0时,不显示绿屏,而显示黑屏

(2)排查解码失败的原因。

其中第二个原因由于部分是平台硬解,特别是解码问题需要厂商硬件支持,如果没有软硬件配合,就无法解决问题。但是硬件方面通常涉及到很多问题,需要与厂商沟通和合作,因此这个过程可能需要一定的时间。所以优先从yuv检测着手进行:

之前和小伙伴讨论,可以检测yuv数据是否全0值来判断:如果输入的YUV数据中确实包含了像素值为0的情况,那么检测数据是否全0值可能有一定的参考价值。例如,如果一个视频帧中所有像素的亮度、色度和红色通道的值都为0,则该视频帧可能被视为无效或不良的帧。

3. 解决方案

3.1. opencv检测

针对该问题和新来的小伙伴讨论了一下,他们公司之前也有类似检测机制,不过他们的检测是在opencv中完成的,

具体实现如下:

  • 将输入图像从YUV色彩空间转换到BGR色彩空间。
  • 选取图像中心区域(100×100像素),并计算其中绿色像素的数量。
  • 计算绿色像素占总像素数的比例,并与阈值0.8进行比较。如果大于阈值,则判定输入图像为绿屏图像。
  • 如果判定为绿屏图像,则输出日志信息并返回true;否则返回false。

其相关代码如下:

3.2. 图像全域检测

针对一帧图像,一次判断每个像素点的值,如果全零或者一定阈值个数为0,即判断该帧图像为绿屏帧,进行丢弃,相关代码:

这个方法检测效率太低了,一帧图像需要几百毫秒,不满足实时性要求,所以增加一个阈值500,达到阈值之后就判断为绿屏,相关代码如下:

该方案原则上要检测所有图像数据,大概需要检测500左右个像素。

然后这个方法也有缺陷,如果绿屏刚好在500个像素之后才发生呢?就无法起到检测后面绿屏的视频帧了。

3.3. 固定角落检测

针对上述问题进行改进:依次判断左上,右上,左下,右下,边长为10的正方形的数据,对于每个正方形,使用两重循环遍历像素,并计算出在一维数据中的索引。然后判断该索引处的像素值即可。该方法可以大幅度提升检测的效率。仅需要检测400个像素点即可。

3.4 四角检测优化版

后来我们在四角监测机制上又做了改进:涉及4个角落,10*10的正方向,上述算法检测效率太低了,所以增加了一个改进型的4角检测机制,目前检测仅需要100个像素点即可。

3.5 随机检测

为了减少检测像素的数量,想到可以用随机检测两个10*10正方向的方案进行 ,相关代码如下:

虽然现在仅需要检测200个像素点即可,但是经过讨论该方案可能存在一定缺陷:

如果随机的两个正方向都在某半部分,而绿屏是在另外部分,那检测就会失效了,例如:

3.6 增强随机检测

在上面问题基础上,重新优化了一轮:将一帧图像划分为两部分,上下各一半;然后在其中一般随机选择10*10的部分进行检测,相关代码如下:

 

4. 问题总结

针对一个问题,我们可以采用不同的方案来解决它。为了提高方案的效率和健壮性,我们可以执行以下步骤:

  1. 分析问题:对于一个问题,我们需要深入分析其特性、难点和局限性等,以便确定合适的解决方案。在分析过程中,可以考虑使用实验、模拟、仿真、数据分析等方法来验证和评估不同方案的优缺点。
  2. 设计和测试方案:基于分析结果,设计出可行的解决方案,并进行测试和评估。在测试时,可以采用一些标准测试用例或者真实场景数据来模拟和检测不同方案的性能和功能。
  3. 优化方案:基于测试结果,对不同方案进行优化和改进,以提高方案的效率和健壮性。优化方案的方法包括但不限于算法优化、代码优化、并行化等。
  4. 多种方案比较:最终,我们需要比较不同方案的性能、可靠性、扩展性、可维护性等指标,并选择最佳的解决方案。比较时,还需要结合实际应用场景和需求来进行判断和权衡。

本文福利, 免费领取C++音视频学习资料包、技术视频/代码,内容包括(音视频开发,面试题,FFmpeg ,webRTC ,rtmp ,hls ,rtsp ,ffplay ,编解码,推拉流,srs)↓↓↓↓↓↓见下面↓↓文章底部点击免费领取↓↓

这篇关于音视频学习–关于绿屏的6种检测方案的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/302655

相关文章

HarmonyOS学习(七)——UI(五)常用布局总结

自适应布局 1.1、线性布局(LinearLayout) 通过线性容器Row和Column实现线性布局。Column容器内的子组件按照垂直方向排列,Row组件中的子组件按照水平方向排列。 属性说明space通过space参数设置主轴上子组件的间距,达到各子组件在排列上的等间距效果alignItems设置子组件在交叉轴上的对齐方式,且在各类尺寸屏幕上表现一致,其中交叉轴为垂直时,取值为Vert

Ilya-AI分享的他在OpenAI学习到的15个提示工程技巧

Ilya(不是本人,claude AI)在社交媒体上分享了他在OpenAI学习到的15个Prompt撰写技巧。 以下是详细的内容: 提示精确化:在编写提示时,力求表达清晰准确。清楚地阐述任务需求和概念定义至关重要。例:不用"分析文本",而用"判断这段话的情感倾向:积极、消极还是中性"。 快速迭代:善于快速连续调整提示。熟练的提示工程师能够灵活地进行多轮优化。例:从"总结文章"到"用

无人叉车3d激光slam多房间建图定位异常处理方案-墙体画线地图切分方案

墙体画线地图切分方案 针对问题:墙体两侧特征混淆误匹配,导致建图和定位偏差,表现为过门跳变、外月台走歪等 ·解决思路:预期的根治方案IGICP需要较长时间完成上线,先使用切分地图的工程化方案,即墙体两侧切分为不同地图,在某一侧只使用该侧地图进行定位 方案思路 切分原理:切分地图基于关键帧位置,而非点云。 理论基础:光照是直线的,一帧点云必定只能照射到墙的一侧,无法同时照到两侧实践考虑:关

【前端学习】AntV G6-08 深入图形与图形分组、自定义节点、节点动画(下)

【课程链接】 AntV G6:深入图形与图形分组、自定义节点、节点动画(下)_哔哩哔哩_bilibili 本章十吾老师讲解了一个复杂的自定义节点中,应该怎样去计算和绘制图形,如何给一个图形制作不间断的动画,以及在鼠标事件之后产生动画。(有点难,需要好好理解) <!DOCTYPE html><html><head><meta charset="UTF-8"><title>06

学习hash总结

2014/1/29/   最近刚开始学hash,名字很陌生,但是hash的思想却很熟悉,以前早就做过此类的题,但是不知道这就是hash思想而已,说白了hash就是一个映射,往往灵活利用数组的下标来实现算法,hash的作用:1、判重;2、统计次数;

高效+灵活,万博智云全球发布AWS无代理跨云容灾方案!

摘要 近日,万博智云推出了基于AWS的无代理跨云容灾解决方案,并与拉丁美洲,中东,亚洲的合作伙伴面向全球开展了联合发布。这一方案以AWS应用环境为基础,将HyperBDR平台的高效、灵活和成本效益优势与无代理功能相结合,为全球企业带来实现了更便捷、经济的数据保护。 一、全球联合发布 9月2日,万博智云CEO Michael Wong在线上平台发布AWS无代理跨云容灾解决方案的阐述视频,介绍了

综合安防管理平台LntonAIServer视频监控汇聚抖动检测算法优势

LntonAIServer视频质量诊断功能中的抖动检测是一个专门针对视频稳定性进行分析的功能。抖动通常是指视频帧之间的不必要运动,这种运动可能是由于摄像机的移动、传输中的错误或编解码问题导致的。抖动检测对于确保视频内容的平滑性和观看体验至关重要。 优势 1. 提高图像质量 - 清晰度提升:减少抖动,提高图像的清晰度和细节表现力,使得监控画面更加真实可信。 - 细节增强:在低光条件下,抖

零基础学习Redis(10) -- zset类型命令使用

zset是有序集合,内部除了存储元素外,还会存储一个score,存储在zset中的元素会按照score的大小升序排列,不同元素的score可以重复,score相同的元素会按照元素的字典序排列。 1. zset常用命令 1.1 zadd  zadd key [NX | XX] [GT | LT]   [CH] [INCR] score member [score member ...]

Android平台播放RTSP流的几种方案探究(VLC VS ExoPlayer VS SmartPlayer)

技术背景 好多开发者需要遴选Android平台RTSP直播播放器的时候,不知道如何选的好,本文针对常用的方案,做个大概的说明: 1. 使用VLC for Android VLC Media Player(VLC多媒体播放器),最初命名为VideoLAN客户端,是VideoLAN品牌产品,是VideoLAN计划的多媒体播放器。它支持众多音频与视频解码器及文件格式,并支持DVD影音光盘,VCD影

【机器学习】高斯过程的基本概念和应用领域以及在python中的实例

引言 高斯过程(Gaussian Process,简称GP)是一种概率模型,用于描述一组随机变量的联合概率分布,其中任何一个有限维度的子集都具有高斯分布 文章目录 引言一、高斯过程1.1 基本定义1.1.1 随机过程1.1.2 高斯分布 1.2 高斯过程的特性1.2.1 联合高斯性1.2.2 均值函数1.2.3 协方差函数(或核函数) 1.3 核函数1.4 高斯过程回归(Gauss