视频解码故障案例两则

news2024/9/25 13:19:30

 案例1 绿边


故障分析:

这个能明显看到视频上方出现绿色半透明边带。这说明Y数据正常。UV数据不正常。

它显然与视频帧的垂直分辨率设置有关。

UV数据和Y数据是连续放置的,如果上方出现彩色数据失调,说明这部分数据实际仍然是Y数据。也就是说如果这是1920*1080p的数据,那么说明它的线数比1080更大。

根据绿边行数/2,加至1080的数据上,故障消失:

案例2 栅格

故障分析

上面的配置下,出现水平数据的错位,在上面可以正常的显示被拆分成了3个带状的数据。YUV模式下不好看故障的特征,先把UV数据消掉,用标准的灰度图像去观察:

相关的灰度UV数据生成:

uv_plane = np.full((height // 2, width), 128, dtype=np.uint8)

最终根据灰度图上的关键点位的相对位置,得到了真正的width,修正后:

 

附录 A 16*16宏块分散的视频数据重组为标准YUV-420

这段代码没有用到,备用。本来是为了处理案例2.

    def merge_to_yuv420(self, macrobloc_data, width, height):
        # Calculate sizes
        Y_size = width * height
        U_size = Y_size // 4  # U and V are quarter size of Y
        
        # Initialize arrays for Y, U, V
        Y = np.empty((height, width), dtype=np.uint8)
        U = np.empty((height // 2, width // 2), dtype=np.uint8)
        V = np.empty((height // 2, width // 2), dtype=np.uint8)
        
        # Merge macroblocks into Y, U, V components
        for r in range(height // 16):
            for c in range(width // 16):
                macroblock_index = r * (width // 16) + c
                Y_block_start = macroblock_index * 256
                U_block_start = Y_size + (macroblock_index * 64)
                V_block_start = Y_size + U_size + (macroblock_index * 64)
                
                # Merge Y block
                Y[r*16:(r+1)*16, c*16:(c+1)*16] = np.frombuffer(macrobloc_data[Y_block_start:Y_block_start+256], dtype=np.uint8).reshape(16, 16)
                
                # Merge U and V blocks
                U[r*8:(r+1)*8, c*8:(c+1)*8] = np.frombuffer(macrobloc_data[U_block_start:U_block_start+64], dtype=np.uint8).reshape(8, 8)
                V[r*8:(r+1)*8, c*8:(c+1)*8] = np.frombuffer(macrobloc_data[V_block_start:V_block_start+64], dtype=np.uint8).reshape(8, 8)
        
        return Y, U, V


    def nv12_to_rgb(self, nv12, width, height):
        width = 1920
        height = 1080
        Y,U,V = self.merge_to_yuv420(nv12, width, height)
        U_upsampled = cv2.resize(U, (width, height), interpolation=cv2.INTER_LINEAR)
        V_upsampled = cv2.resize(V, (width, height), interpolation=cv2.INTER_LINEAR)
        yuv_image = np.concatenate((Y, U_upsampled, V_upsampled))
    
        # Use OpenCV to convert YUV420sp (NV12) to RGB
        rgb_image = cv2.cvtColor(yuv_image, cv2.COLOR_YUV2RGB_IYUV)
        return rgb_image

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1914838.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

用微信服务号支付门诊缴费

时间上午10刚过,医院里计价收费处排起了长龙,放眼望去,左边的窗口六条队。右边在原来发药的位置也开辟了收费窗口,数了一下有四条队。一共十条排队付费的长龙,每一条队伍的人数不下20人,也即超过200人在排队…

Jenkins 构建 Web 项目:构建服务器和部署服务器分离, 并且前后端在一起的项目

构建命令 #!/bin/bash cd ruoyi-ui node -v pnpm -v pnpm install pnpm build:prod # 将dist打包成dist.zip zip -r dist.zip dist cp dist.zip ../dist.zip

最新vue3实战开源项目-视频课程售卖系统(1)60+节

很长一段时间自己都没有时间或者时机做一些自己的东西或者和一些志同道合的朋友做属于自己的综合型系统,直到今天才有时间去整理和拿出来这个项目,当然后面还有😄Uniapp / React的项目,主要是小程序和手机端的,希望感兴…

7月10日学习打卡,环形链表+栈OJ

前言 大家好呀,本博客目的在于记录暑假学习打卡,后续会整理成一个专栏,主要打算在暑假学习完数据结构,因此会发一些相关的数据结构实现的博客和一些刷的题,个人学习使用,也希望大家多多支持,有…

实习记录3

1.Mybaits懒加载 MyBatis 延迟加载(懒加载)一篇入门-腾讯云开发者社区-腾讯云 (tencent.com) 2.高级映射 106-高级映射之多对一映射第一种方式_哔哩哔哩_bilibili 3.TableId(type IdType.INPUT) Mybatis-plus 主键生成策略_mybatis-plus 自增主键等于…

基于51单片机的五路抢答器Protues仿真设计

目录 一、设计背景 二、实现功能 三、仿真演示 四、源程序(部分) 一、设计背景 近年来随着科技的飞速发展,单片机的应用正在不断的走向深入。本文阐述了基于51单片机的五路抢答器设计。本设计中,51单片机充当了核心控制器的角…

怎么做好菲律宾TikTok直播带货?

TikTok目前是全球最受欢迎的APP之一,菲律宾TikTok直播已成为品牌出海的新趋势。作为一种新兴的引流渠道,出海电商卖家正通过直播带货模式实现流量变现。 在进行菲律宾TikTok直播时,关键在于能否吸引和留住消费者并促成购买。因此,…

Python基础语法:变量和数据类型详解(整数、浮点数、字符串、布尔值)①

文章目录 变量和数据类型详解(整数、浮点数、字符串、布尔值)一、变量二、数据类型1. 整数(int)2. 浮点数(float)3. 字符串(str)4. 布尔值(bool) 三、类型转换…

高考后暑假新选择:从AI聊天机器人开发入门IT领域

你好,我是三桥君 七月来临,各省高考分数已揭榜完成。而高考的完结并不意味着学习的结束,而是新旅程的开始。对于有志于踏入IT领域的高考少年们,这个假期是开启探索IT世界的绝佳时机。 不知道这些有志于踏入IT领域的高考少年们&…

车载聚合路由器应用场景分析

乾元通QYT-X1z车载式1U多卡聚合路由器,支持最多8路聚合,无论是应急救援,还是车载交通,任何宽带服务商无法覆盖的区域,聚合路由器可提供现场需要的稳定、流畅、安全的视频传输网络,聚合路由器可无缝接入应急…

二四、3d人脸构建

一、下载github项目3dmm_cnn-master https://github.com/anhttran/3dmm_cnn.git 一个使用深度神经网络从单个图像进行 3D 人脸建模的项目,端到端代码,可直接根据图像强度进行 3D 形状和纹理估计;使用回归的 3D 面部模型,从检测到的面部特征点估计头部姿势和表情。…

linux查看目录下的文件夹命令,find 查找某个目录,但是不包括这个目录本身?

linux查看目录下的文件夹命令,find 查找某个目录,但是不包括这个目录本身? Linux中查看目录下的文件夹的命令是使用ls命令。ls命令用于列出指定目录中的文件和文件夹。通过不同的选项可以实现显示详细信息、按照不同的排序方式以及使用不同的…

网络安全防御【防火墙安全策略用户认证综合实验】

目录 一、实验拓扑图 二、实验要求 三、实验思路 四、实验步骤 1、打开ensp防火墙的web服务(带内管理的工作模式) 2、在FW1的web网页中网络相关配置 3、交换机LSW6(总公司)的相关配置: 4、路由器相关接口配置&a…

Java中的锁都有什么

文章目录 锁公平锁与非公平锁可重入锁与不可重入锁共享锁与独占锁悲观锁与乐观锁自旋锁与适应性自旋锁偏向锁轻量级锁与重量级锁可中断锁互斥锁死锁使用资源有序分配法避免死锁使用银行家算法避免死锁使用tryLock进行超时锁定 锁 在Java中根据锁的特性来划分可以分为很多&…

(自用)共享单车服务器(二) 项目日志

stdin、stdout、stderr 注意&#xff1a;stderr是不缓存的&#xff0c;stdout则进行行间缓存。接下来我们看下行间缓存的效果&#xff0c;请参考以下代码&#xff1a; #include "stdio.h" #include <unistd.h>int main(int argc, char** argv) {for (int i 0…

Hum Brain Mapp:青春期早期的灰质流失可以用白质生长来解释吗?

摘要 关于大脑发育的一个基本谜题是&#xff0c;为什么儿童进入青春期时&#xff0c;灰质(GM)体积明显减少&#xff0c;而白质(WM)体积明显增加。一种流行的理论认为&#xff0c;由于被修剪的突触太小而不足以影响脑灰质体积&#xff0c;因此大脑总体积保持稳定&#xff0c;而…

从0-1搭建一个web项目(页面布局详解)详解

本章分析页面布局详解详解 ObJack-Admin一款基于 Vue3.3、TypeScript、Vite3、Pinia、Element-Plus 开源的后台管理框架。在一定程度上节省您的开发效率。另外本项目还封装了一些常用组件、hooks、指令、动态路由、按钮级别权限控制等功能。感兴趣的小伙伴可以访问源码点个赞 地…

10个图源二维码分享及使用方法

我们曾在《8个图源二维码分享及使用方法》一文中&#xff0c;为你分享了8个图源二维码。 现在在此基础之上新增两个图源二维码&#xff0c;共享10个。 如果你需要这些图源&#xff0c;请在文末查看领取方式。 新增了哪两个图源 增加的两个图源分别是全球10m等高线地图和全球…

【HTML入门】第八课 - 链接的学习(二)

我们上一节学习了&#xff0c;链接的基本知识&#xff0c;有锚点&#xff0c;还有鼠标上移的title属性的作用&#xff0c;这一节&#xff0c;我们继续说链接的知识点。 目录 1 跳转本项目的网页 1.1 修改html文件名 1.2 新建index1.html文件 1.3 修改index1.html文件 1.4…

随身WiFi市场乱象横生,随身WiFi测评最好的格行随身WiFi如何引领变革?

在当今随身WiFi市场乱象频发、内卷严重的背景下&#xff0c;消费者对于产品的性能与商家是否会后台割韭菜依旧存疑&#xff0c;尤其是“随身WiFi到底卡不卡&#xff1f;”的问题&#xff0c;成为了广大消费者关注的重点。然而&#xff0c;在众多品牌中&#xff0c;格行随身WiFi…