一、概述
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
256256个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
大小为256256+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上进行编译运行,运行完成之后打开新生成的图片,可看到对比原来的图片亮度已经减半