编程操作YUV像素

这里写目录标题

  • 一、概述
  • 二、YUV比较常见的图像格式
    • 1、==YUV444==
    • 2、==YUV420P==
    • 3、==YUV420SP==
  • 三、对YUV像素进行编程操作
    • 程序思路

一、概述

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像素_第1张图片

三、对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上进行编译运行,运行完成之后打开新生成的图片,可看到对比原来的图片亮度已经减半
编程操作YUV像素_第2张图片

你可能感兴趣的:(音视频,linux,音视频,YUV,c语言)