音视频学习–关于绿屏的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

相关文章

SpringBoot实现接口数据加解密的三种实战方案

《SpringBoot实现接口数据加解密的三种实战方案》在金融支付、用户隐私信息传输等场景中,接口数据若以明文传输,极易被中间人攻击窃取,SpringBoot提供了多种优雅的加解密实现方案,本文将从原... 目录一、为什么需要接口数据加解密?二、核心加解密算法选择1. 对称加密(AES)2. 非对称加密(R

MySQL精准控制Binlog日志数量的三种方案

《MySQL精准控制Binlog日志数量的三种方案》作为数据库管理员,你是否经常为服务器磁盘爆满而抓狂?Binlog就像数据库的“黑匣子”,默默记录着每一次数据变动,但若放任不管,几天内这些日志文件就... 目录 一招修改配置文件:永久生效的控制术1.定位my.cnf文件2.添加核心参数不重启热更新:高手应

重新对Java的类加载器的学习方式

《重新对Java的类加载器的学习方式》:本文主要介绍重新对Java的类加载器的学习方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1、介绍1.1、简介1.2、符号引用和直接引用1、符号引用2、直接引用3、符号转直接的过程2、加载流程3、类加载的分类3.1、显示

MySQL中like模糊查询的优化方案

《MySQL中like模糊查询的优化方案》在MySQL中,like模糊查询是一种常用的查询方式,但在某些情况下可能会导致性能问题,本文将介绍八种优化MySQL中like模糊查询的方法,需要的朋友可以参... 目录1. 避免以通配符开头的查询2. 使用全文索引(Full-text Index)3. 使用前缀索

Python解决雅努斯问题实例方案详解

《Python解决雅努斯问题实例方案详解》:本文主要介绍Python解决雅努斯问题实例方案,雅努斯问题是指AI生成的3D对象在不同视角下出现不一致性的问题,即从不同角度看物体时,物体的形状会出现不... 目录一、雅努斯简介二、雅努斯问题三、示例代码四、解决方案五、完整解决方案一、雅努斯简介雅努斯(Janu

电脑找不到mfc90u.dll文件怎么办? 系统报错mfc90u.dll丢失修复的5种方案

《电脑找不到mfc90u.dll文件怎么办?系统报错mfc90u.dll丢失修复的5种方案》在我们日常使用电脑的过程中,可能会遇到一些软件或系统错误,其中之一就是mfc90u.dll丢失,那么,mf... 在大部分情况下出现我们运行或安装软件,游戏出现提示丢失某些DLL文件或OCX文件的原因可能是原始安装包

电脑显示mfc100u.dll丢失怎么办?系统报错mfc90u.dll丢失5种修复方案

《电脑显示mfc100u.dll丢失怎么办?系统报错mfc90u.dll丢失5种修复方案》最近有不少兄弟反映,电脑突然弹出“mfc100u.dll已加载,但找不到入口点”的错误提示,导致一些程序无法正... 在计算机使用过程中,我们经常会遇到一些错误提示,其中最常见的就是“找不到指定的模块”或“缺少某个DL

使用Python实现IP地址和端口状态检测与监控

《使用Python实现IP地址和端口状态检测与监控》在网络运维和服务器管理中,IP地址和端口的可用性监控是保障业务连续性的基础需求,本文将带你用Python从零打造一个高可用IP监控系统,感兴趣的小伙... 目录概述:为什么需要IP监控系统使用步骤说明1. 环境准备2. 系统部署3. 核心功能配置系统效果展

Java学习手册之Filter和Listener使用方法

《Java学习手册之Filter和Listener使用方法》:本文主要介绍Java学习手册之Filter和Listener使用方法的相关资料,Filter是一种拦截器,可以在请求到达Servl... 目录一、Filter(过滤器)1. Filter 的工作原理2. Filter 的配置与使用二、Listen

Java Response返回值的最佳处理方案

《JavaResponse返回值的最佳处理方案》在开发Web应用程序时,我们经常需要通过HTTP请求从服务器获取响应数据,这些数据可以是JSON、XML、甚至是文件,本篇文章将详细解析Java中处理... 目录摘要概述核心问题:关键技术点:源码解析示例 1:使用HttpURLConnection获取Resp