[Video and Audio Data Processing] YUV 420数据分离

C语言学习笔记(8)——第一次个人实战(YUV图像分割) 很遗憾第一次实战并没有达到我想要的效果,想要达到的目的是把一个n帧的3840*1920的YUV420p的图像均分成64份。 首先来看一下YUV4:2:0格式的存储格式,首先可以参照大神写的http://blog.youkuaiyun.com/lin453701006/article/details/53053185这篇博文了解一下YUV格式。 简单来讲,假设有个4*4的像素点,对于420P而言,不妨假设这四 阅读详情

0. 背景

本文基于雷神的博客,基于Visual Studio 2019,实现YUV数据分离…话说没想到又见到了大学系主任,讲数字图像处理时候,用到的Lena图…

在这里插入图片描述

1. 下载源代码,编译YUV播放器

从雷神的开源github下载YUVplayer源码,https://github.com/leixiaohua1020/YUVplayer
在这里插入图片描述
启动Visual Studio,打开刚才下载解压后的yuvplayer.sln文件.
在这里插入图片描述
在这里插入图片描述

升级一下工具集,
在这里插入图片描述

接下来编译:

在这里插入图片描述

接下来在release目录下面会找到应用程序,把它拿到桌面,一会使用。
在这里插入图片描述

2. 新建一个新项目

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

把Lena图片,放到刚才的工程目录下面,备注,Lena图,从以下博客获取:

https://github.com/leixiaohua1020/simplest_mediadata_test

当然你也可以从以下地方获取:

https://www.ece.rice.edu/~wakin/images/ (备注:这个是佛罗里达的原图,并不试用此测试)

在这里插入图片描述

然后写代码,参考:

https://blog.youkuaiyun.com/leixiaohua1020/article/details/50534150


extern "C"
{
#ifdef __cplusplus
#define __STDC_CONSTANT_MACROS

#endif

}
extern "C" {

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
}


/**
 * Split Y, U, V planes in YUV420P file.
 * @param url  Location of Input YUV file.
 * @param w    Width of Input YUV file.
 * @param h    Height of Input YUV file.
 * @param num  Number of frames to process.
 *
 */
int simplest_yuv420_split(char* url, int w, int h, int num) {
    FILE* fp = fopen(url, "rb+");
    FILE* fp1 = fopen("output_420_y.y", "wb+");
    FILE* fp2 = fopen("output_420_u.y", "wb+");
    FILE* fp3 = fopen("output_420_v.y", "wb+");

    unsigned char* pic = (unsigned char*)malloc(w * h * 3 / 2);

    for (int i = 0; i < num; i++) {

        fread(pic, 1, w * h * 3 / 2, fp);
        //Y
        fwrite(pic, 1, w * h, fp1);
        //U
        fwrite(pic + w * h, 1, w * h / 4, fp2);
        //V
        fwrite(pic + w * h * 5 / 4, 1, w * h / 4, fp3);
    }

    free(pic);
    fclose(fp);
    fclose(fp1);
    fclose(fp2);
    fclose(fp3);

    return 0;
}


int main()
{
    simplest_yuv420_split("lena_256x256_yuv420p.yuv", 256, 256, 1);
    return 0;
}

在这里插入图片描述
改成x64,然后编译;

>C:\Users\Administrator\source\repos\YUV_Split\split.cpp(28,16): 
>error C4996: 'fopen': This function or variable may be unsafe. 
>Consider using fopen_s instead. To disable deprecation, 
>use _CRT_SECURE_NO_WARNINGS. See online help for details

这个报错解决方法如下:
项目 ->属性,编辑预处理器: 添加 _CRT_SECURE_NO_WARNINGS

在这里插入图片描述
在这里插入图片描述

1>C:\Users\Administrator\source\repos\YUV_Split\split.cpp(58,66): 
error C2664: “int simplest_yuv420_split(char *,int,int,int)”: 
无法将参数 1 从“const char [25]”转换为“char *”
int simplest_yuv420_split(const char* url, int w, int h, int num) 

参数修改加上const即可解决,最终代码如下:

extern "C"
{
#ifdef __cplusplus
#define __STDC_CONSTANT_MACROS

#endif

}
extern "C" {

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
}


/**
 * Split Y, U, V planes in YUV420P file.
 * @param url  Location of Input YUV file.
 * @param w    Width of Input YUV file.
 * @param h    Height of Input YUV file.
 * @param num  Number of frames to process.
 *
 */
int simplest_yuv420_split(const char* url, int w, int h, int num) {
    FILE* fp = fopen(url, "rb+");
    FILE* fp1 = fopen("output_420_y.y", "wb+");
    FILE* fp2 = fopen("output_420_u.y", "wb+");
    FILE* fp3 = fopen("output_420_v.y", "wb+");

    unsigned char* pic = (unsigned char*)malloc(w * h * 3 / 2);

    for (int i = 0; i < num; i++) {

        fread(pic, 1, w * h * 3 / 2, fp);
        //Y
        fwrite(pic, 1, w * h, fp1);
        //U
        fwrite(pic + w * h, 1, w * h / 4, fp2);
        //V
        fwrite(pic + w * h * 5 / 4, 1, w * h / 4, fp3);
    }

//这里写的方法可参考我之前的博客,420就是这样存的,
//https://blog.youkuaiyun.com/Codeliang666/article/details/106288043
    free(pic);
    fclose(fp);
    fclose(fp1);
    fclose(fp2);
    fclose(fp3);

    return 0;
}


int main()
{
    simplest_yuv420_split("lena_256x256_yuv420p.yuv", 256, 256, 1);
    return 0;
}

3. 效果

在这里插入图片描述

在这里插入图片描述
以Y分量来看这些图片:

在这里插入图片描述

然后你会发现u分量是下面这样的,一脸懵逼:

在这里插入图片描述

原因是分辨率不是256256了,需要手动修改成128128

在这里插入图片描述

以下是v 分量的.
在这里插入图片描述

OVER! 本文到此结束,感谢阅读!

从C.L.I.P项目看可编程文字PV:构建数据驱动的动态视觉生成系统 动态图形与程序化生成是数字媒体领域的关键技术,其核心原理在于通过算法和参数化控制,将视觉元素与时间、数据流动态绑定。这种技术价值在于将创意表达从传统手工制作中解放,实现高质量内容的批量、自动化生产,广泛应用于音乐可视化、品牌动态标识、数据新闻和交互式艺术装置等场景。本文以文字PV(动态文字视觉)为例,深入探讨如何构建一套可编程的生成系统,通过解耦数据、渲染与合成层,并利用音频分析、JSON配置驱动和Canvas/WebGL渲染等技术栈,实现从创意配置到视频输出的完整工程化管线,为内容创作者提供稳定、可复用的 阅读详情

相关推荐

全志R128芯片RTOS多媒体解码开发实战

实时操作系统(RTOS)在嵌入式多媒体处理中具有确定性调度和低内存占用的核心优势,特别适合智能终端设备的音视频解码场景。通过硬件加速模块如VPU实现H.264/MPEG-4等视频流的硬解码,配合零拷贝管道技术可显著提升性能。全志R128芯片的多核架构与FreeRTOS组合,为智能家居、工业HMI等应用提供了高效解决方案。开发中涉及SDK配置、rtplayer中间件使用以及内存优化策略,其中DMA内存分配和帧缓存池管理是关键优化点。

329

YUV1-----分离YUV420P像素数据中的Y、U、V分量

1、先了解一下YUV420P (1)YUV,分为三个分量,“Y”表示明亮度(Luminance或Luma),也就是灰度值;而“U”和“V” 表示的则是色度(Chrominance或Chroma),作用是描述影像色彩及饱和度,用于指定像素的颜色。     与我们熟知的RGB类似,YUV也是一种颜色编码方法,主要用于电视系统以及模拟视频领域,它将亮度信息(Y)与色彩信息(UV)分离,没有U

qingkongyeyue的博客 1万+

[素材]分离YUV420P像素数据中的Y、U、V分量.zip

[素材]分离YUV420P像素数据中的Y、U、V分量.zip 本素材对应的文章为:《【音视频数据数据处理 1】【YUV篇】分离YUV420P像素数据中的Y、U、V分量》 地址: https://ciellee.blog.youkuaiyun.com/article/details/108226105

YUV像素数据分解为 Y ,U, V分量

如果视频帧的宽和高分别为w和h,那么一帧YUV420P像素数据一共占用w*h*3/2 Byte的数据。其中前w*h Byte存储Y,接着的w*h*1/4 Byte存储U,最后w*h*1/4 Byte存储V。上述调用函数的代码运行后,将会把一张分辨率为256x256的名称为1.yuv的YUV420P格式的像素数据文件分离成为三个文件: output_420_y.y:纯Y数据,分辨率为256

Riven_mingri的博客 5771

MopalFreeVideoPlayer(VOB播放器)v1.11绿色汉化版

Mopal Free Video Player是一款用于vob文件播放的播放器。你还用来管理、播放其他视频文件,可以播放MPG, VOB(DVD), MOV, 3GP, MP4, DAT(VCD), FLV, AVI, WMV, ASF。 vob用什么播放器*.vob后缀的文件是DVD的文件格式,只要能够播放DVD的软件都是可以播放的,如: 1、暴风影音; 2、RealPlayer; 3、Wind

YUV420在qt5下显示

yuv420在qt5下的使用opengl显示方法,在ubuntu16下测试通过。

入门视频采集与处理(学会分析YUV数据)

<br />做视频采集与处理,自然少不了要学会分析YUV数据。因为从采集的角度来说,一般的视频采集芯片输出的码流一般都是YUV数据流的形式,而从视频处理(例如H.264、MPEG视频编解码)的角度来说,也是在原始YUV码流进行编码和解析,所以,了解如何分析YUV数据流对于做视频领域的人而言,至关重要。本文就是根据我的学习和了解,简单地介绍如何分析YUV数据流。<br />    YUV,分为三个分量,“Y”表示明亮度(Luminance或Luma),也就是灰度值;而“U”和“V” 表示的则是色度(Chrom

slippercat的专栏 2154

基于bootstrap+Java的图书管理系统(任务书)

10] 倪甜弟,周晓波,王相喜.基于JSP图书馆自习室预约系统的设计与实现[J].现代计算机, 2024, 30(9):117-120.DOI:10.3969/j.issn.1007-1423.2024.09.023.[2] 陈明雪,赵勇,周小丽,等.基于Node.js和Bootstrap的图书管理系统设计与研究[J].现代信息科技, 2021, 5(24):4.[9] 杨婷婷.基于VOSviewer的图书馆管理系统研究的可视化分析[J].现代信息科技, 2023, 7(3):123-126.

毕业作品网站 646

视音频数据处理入门:RGB、YUV像素数据处理

有段时间没有写博客了,这两天写起博客来竟然感觉有些兴奋,仿佛找回了原来的感觉。前一阵子在梳理以前文章的时候,发现自己虽然总结了各种视音频应用程序,却还缺少一个适合无视音频背景人员学习的“最基础”的程序。因此抽时间将以前写过的代码整理成了一个小项目。

雷霄骅(leixiaohua1020)的专栏 29万+

Visual Studio Git 使用指南

Visual Studio 2022深度集成了Git功能,提供了直观的图形界面管理源代码。本文详细介绍了VS中Git的使用方法:从环境准备、克隆/创建仓库开始,重点讲解了"Git更改"窗口的日常操作,包括查看修改、暂存文件、提交推送等。同时涵盖了分支管理、查看历史、解决冲突等核心功能,以及储藏、重置等高级操作。文章还提供了实用技巧,如提交规范、频繁提交等最佳实践。VS的Git集成覆盖了日常开发需求,图形界面与命令行可互补使用,适合各层次开发者高效管理代码版本。

guigenyi的专栏 1567

单细胞分析进阶:sctransform标准化在Seurat中的实战解析

本文深入解析了sctransform标准化方法在Seurat单细胞分析中的实战应用。通过对比传统对数标准化,sctransform能更有效地建模并剔除技术噪音,提升数据质量。文章提供了从环境配置、数据准备、核心参数解析到完整流程整合的详细指南,并针对常见问题给出解决方案,帮助研究者获得更清晰的细胞分群和更可靠的差异表达结果。

weixin_29248313的博客 150

[Video and Audio Data Processing] YUV420P像素数据的亮度减半

0. 修改之后,可以直接编译的代码如下 extern "C" { #ifdef __cplusplus #define __STDC_CONSTANT_MACROS #endif } extern "C" { #include <stdio.h> #include <stdlib.h> #include <string.h> #include <math.h> } /** * Split Y, U, V planes in YUV444P file

编程菜汝狗 275

如何设计一个低代码平台

近些年来,低代码发展火热,各种低代码平台如雨后春笋纷纷崛起,这些平台各定位不同,优劣不同,用户的选择空间很大。那么,如果用户想从零开始设计一个低代码平台,该如何做呢?

Jarod_Chou的博客 8257

[Video and Audio Data Processing] 计算两个YUV420P像素数据的PSNR

0. 背景 主要是对比两张YUV图片中亮度分量Y的PSNR; PSNR通常用于质量评价,就是计算受损图像与原始图像之间的差别,以此来评价受损图像的质量。 mse的计算公式如下: PSNR计算公式如下: 其中M,N分别为图像的宽高,xij和yij分别为两张图像的每一个像素值。 1. 代码分析 原图与对比图,差异如下: 以下为visual studio 2019可以跑通的代码: extern "C" { #ifdef __cplusplus #define __STDC_CONSTANT_MACROS

编程菜汝狗 607

【NLP】第十章:位置编码Positional Encoding

前面讲RNN时一般都会有一个ht的输出,这个输出就是样本与样本之间的信息,而且RNN是时序循环的,所以RNN本身的结构,在物理上,就自带词的前后顺序信息的。比如词never,不管never本身的词向量是什么,只要你在序列中排第一个位置,你的位置向量就是[0,1,01],你排第三个位置,你的位置向量就是[0.9,-0,4,0.2,1.0]。也所以,你可以理解为:embedding后的词嵌入,PE按照每个样本在sequence中的位置,把embedding后的词嵌入给扭转后,才送入attention的。

因为热爱所以坚持 1917

DO-297标准详解:IMA系统开发与认证指南

DO-297的前言部分为读者提供了本指南的概述,说明了该标准的编写背景、主要目标、目标受众以及该文件在开发和认证集成模块化航空电子(IMA,Integrated Modular Avionics)系统中的作用。作为现代航空电子架构的重要组成部分,IMA系统大幅度简化了航空电子系统的硬件配置,增加了灵活性并降低了成本。因此,DO-297成为确保IMA系统开发、集成和认证符合适航标准的核心文件。在现代航空领域,系统复杂性逐渐增加,传统上各子系统独立运行的方式已经不适应多任务、多功能的需求。

qq_41854911的博客 1583

[Video and Audio Data Processing] 将YUV420P像素数据去掉颜色(变成灰度图)

0. 代码如下: extern "C" { #ifdef __cplusplus #define __STDC_CONSTANT_MACROS #endif } extern "C" { #include <stdio.h> #include <stdlib.h> #include <string.h> #include <math.h> } /** * Split Y, U, V planes in YUV444P file. * @param

编程菜汝狗 823

猿创征文|SfM(Structure from Motion)学习之路

SfM全称Structure from Motion,译为运动恢复结构,是三维重建pipeline的一部分,又称稀疏重建,在摄影测量领域则称为空三(空中三角测量)。SfM的任务是,给定一系列具有一定重叠度的图像,去同时估计出拍摄每张图像时相机的的位姿(位置t和姿态R)和被拍摄物体或场景的稀疏点云。...............

zeeq的博客 1万+

[Video and Audio Data Processing] 图像的表示方法:RGB模型 vs YUV模型

0. YUV模型介绍 光的三原色是红(Red)、绿(Green)、蓝(Blue)。现代的显示器技术就是通过组合不同强度的三原色,来达成任何一种可见光的颜色。图像储存中,通过记录每个像素红绿蓝强度,来记录图像的方法,称为RGB模型 (RGB Model) 常见的图片格式中,PNG和BMP这两种就是基于RGB模型的。 比如说原图: 分别只显示R G B通道的强度,效果如下: 三个通道下,信息量和细节程度不一定是均匀分布的。比如说可以注意南小鸟脸上的红晕,在3个平面上的区分程度就不同——红色平面下几乎无从

编程菜汝狗 1049

复数值神经网络可能是深度学习的未来

复数这种东西,在人的头脑中似乎抽象、似乎复杂,然而,对于计算机来说,一点也不抽象,不复杂,那么,将复数概念推广到神经网络会是什么结果呢?本篇介绍国外的一些同行的尝试实践,请我们注意观察他们的进展。

gongdiwudu的专栏 6615

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

[Video and Audio Data Processing] 分离RGB24像素数据中的R、G、B分量

0. Visual Studio 2019可编译通过的代码如下: RGB24格式的每个像素的三个分量是连续存储的。一帧宽高分别为w、h的RGB24图像一共占用wh3 Byte的存储空间。 RGB24格式规定首先存储第一个像素的R、G、B,然后存储第二个像素的R、G、B…以此类推,所以 后面的代码就一个简单的for循环遍历,依次把数据取出来。 上述调用函数的代码运行后,将会把一张分辨率为500x500的名称为cie1931_500x500.rgb的RGB24格式的像素数据文件分离成为三个文件: output_

编程菜汝狗 560

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

FFmpeg 音视频数据提取实战:PCM、AAC、YUV、H264 文件提取命令详解

在音视频处理和流媒体开发领域,理解多媒体数据的层级结构是核心基础。从概念上讲,音视频数据通常以封装容器(如MP4)的形式存在,内部包含经过压缩编码的音频流(如AAC)和视频流(如H.264)。其基本原理涉及解复用(Demuxing),即将容器中的压缩码流分离出来,以及解码(Decoding),即将压缩码流还原为原始的、未经压缩的PCM音频数据或YUV视频像素数据。掌握这些基础操作的技术价值在于,它是进行音视频质量分析、算法研究、问题调试和自定义处理流水线的关键前提。无论是排查音视频不同步、花屏问题,还是为计

weixin_33912638的博客 278

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

FFmpeg音视频提取实战:从编码流到原始数据的完整指南

音视频处理是多媒体开发与测试中的基础环节,其核心在于理解数据流的层级结构。从原理上看,音视频文件通常由容器格式封装编码后的码流,而编码流又可解码为原始数据。这一过程涉及编码格式、容器格式与原始数据格式的转换,技术价值在于能够无损提取或解码数据,为分析、转码、算法处理提供基础。在实际应用中,针对不同需求,如提取编码后的H.264视频流、AAC音频流,或解码为YUV像素数据、PCM采样数据,需使用不同的FFmpeg参数组合。例如,通过`-acodec copy`可快速提取AAC码流,而提取PCM则需指定采样格式

weixin_30323631的博客 441

终极指南:如何利用GyroFlow的硬件加速功能提升视频稳定处理性能

GyroFlow是一款基于陀螺仪数据的专业视频稳定软件,能够通过运动相机内置的传感器数据实现精准的视频防抖处理。这款开源工具支持GoPro、Sony、Insta360、DJI等主流运动相机品牌,为无人机航拍、运动摄影、手持拍摄等场景提供专业的稳定解决方案。通过硬件加速和GPU处理技术,GyroFlow可以在保持视频质量的同时显著提升处理速度。 ## 为什么需要优化GyroFlow的导出性能?

gitblog_00338的博客 431

FFmpeg直播流纯净提取:快速去除弹幕的音视频分离技术

流媒体处理是现代多媒体应用的核心技术,其基本原理涉及封装格式的解复用与复用过程。在视频处理领域,FFmpeg作为开源工具提供了强大的流媒体处理能力,能够精确选择和控制音视频流。这种技术对于直播内容二次创作、质量分析和系统集成具有重要价值,特别是在处理包含弹幕等附加数据的直播录像时。通过流选择原理和命令行操作,开发者可以高效实现纯净音视频流的提取,满足内容创作和工程应用的需求。本文基于直播流处理和FFmpeg应用等热词,详细介绍从直播录像中提取无弹幕纯净流的技术方案。

优快云头条 469

基于Qt+FFmpeg+OpenCV+Demucs构建智能视频播放器实战指南

在多媒体开发领域,视频播放器的核心功能通常围绕解码与渲染展开。其基本原理是通过编解码库(如FFmpeg)将压缩的视频和音频数据流解压为原始帧,再交由图形界面框架进行呈现。随着技术发展,现代播放器的价值已超越基础播放,扩展至实时视频分析、AI增强处理等智能场景,这需要整合多个专业库以构建完整的技术栈。例如,结合OpenCV可实现实时图像处理与计算机视觉分析,而集成AI音频分离模型(如Demucs)则能实现人声与伴奏的智能分离。这些技术的融合,使得播放器能够应用于安防监控、内容审核、辅助创作、智能影音等多个场景

weixin_34280237的博客 330
上一篇: [Linux Audio Driver] QACT音效处理
下一篇: 斐波那契数列重要不等式证明
1byte ≠ 8bit
博客等级 码龄8年 7242粉丝 170原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值