编程操作YUV像素

本文介绍了YUV图像格式的三种常见类型——YUV444、YUV420P和YUV420SP,并通过一个256x256分辨率的例子详细解析了它们的像素布局。此外,文章提供了一个C程序示例,演示如何对YUV420P图像进行亮度减半的操作,即将Y分量减半。程序包括读取原始YUV文件、修改亮度和写入新文件的步骤。最后,文章提供了YUV图片查看工具的下载链接。
摘要由CSDN通过智能技术生成

一、概述

YUV是一种图片格式(如jpg、bmp),常用于视频及图像处理中。
YUV为三个分量。“Y”表示亮度(Luminance或Luma),也就是灰度值。“U”和“V” 表示的是彩色信息,分别为色度和浓度(Chrominance和Chroma)。

二、YUV比较常见的图像格式

以256*256分辨率为例

1、YUV444

Y:U:V比例等于4:4:4,即1:1:1
256256个Y
256
256个U
256*256个V

2、YUV420P

Y:U:V=4:1:1
256256个Y、128128个U 、128*128个V
排列方式为YYY…YYYUUU…UUUVVV…VVV

3、YUV420SP

Y:U:V=4:1:1
256256个Y、128128个U、128*128个 V
排列方式为YYY…YYYUVUVUV…UVUVUV
但是UV排列方式和YUV420P的不一样,是UVUVUV交替

打开YUV图片需要特殊工具,可进入链接自行下载
YUV打开工具:链接.
在这里插入图片描述

三、对YUV像素进行编程操作

以这幅图为例,对图片进行亮度减半(即Y分量减半,Y变成1/2)
YUV420P
Y:U:V=4:1:1
256256Y 128128U 128128V
YYY…YYYUUU…UUUVVV…VVV
大小为256
256+128128+128128=二分之三*(256*256)

程序思路

1.取出文件里面的内容
2操作文件里面的内容
3.把文件里面的内容写到另一个文件里

#include <stdio.h>
#include <stdlib.h>

int main()
{
        FILE *fp1=NULL;
        FILE *fp2=NULL;
        int i = 0;

        unsigned char *readbuff;
        readbuff=(unsigned char *)malloc(256*256*3/2);

        fp1=fopen("lena_256x256_yuv420p.yuv","rb+");/*读取文件内容*,rb+读写打开一个二进制文件只允许读写数据*/
        fp2=fopen("new_256x256_yuv420p.yuv","wb+"); /* 读取完文件写入到另一个文件*/

        fread(readbuff,1,256*256*3/2,fp1);

        for(i=0;i<256*256;i++)
        {
                readbuff[i]=readbuff[i]/2;
        }

        fwrite(readbuff,1,256*256*3/2,fp2);

        return 0;
}

在这里插入图片描述
在Linux上进行编译运行,运行完成之后打开新生成的图片,可看到对比原来的图片亮度已经减半
在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

是光哥呀

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值