YUV文件的转换方法

Posted 成长Bar

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了YUV文件的转换方法相关的知识,希望对你有一定的参考价值。

YUV文件包括各种格式(如下图),有时需要它们之间的转换,下面提供2种方法。一种是采用集成软件的方法;第二种是采用C++源代码的方法,仅供参考。


第一种方法:集成软件的方法

首先,在网址:http://www.sunrayimage.com/ 下载YUVTools_3.0即可。

此软件的使用方法极为简单,在此不再赘述。

第二种方法:C++源代码

下面提供一个参考源码,可以根据自己需求进行修改。

#include <stdio.h>
#include <string.h>


#define		READ_WRITE_FILE_SIZE	176*144*2

unsigned char filebuf[38017] = 0;

int YUV422To420(unsigned char yuv422[], unsigned char yuv420[], int width, int height)
        

       int ynum=width*height;
	   int i,j,k=0;
	   for(i=0;i<ynum;i++)
		   yuv420[i]=yuv422[i*2];
			//printf("%d\\n",i);
	   
	   for(i=0;i<height;i++)
		   if((i%2)!=0)continue;
		   for(j=0;j<(width/2);j++)
			   if((4*j+1)>(2*width))break;
			   yuv420[ynum+k*2*width/4+j]=yuv422[i*2*width+4*j+1];
			  printf("%d+%d*%d*%d/4+%d=%d\\n",ynum,k,2,width,j,ynum+k*2*width/4+j);
		   
		    k++;
	   
	   k=0;
	   for(i=0;i<height;i++)
		   if((i%2)==0)continue;
		   for(j=0;j<(width/2);j++)
			   if((4*j+3)>(2*width))break;
			   yuv420[ynum+ynum/4+k*2*width/4+j]=yuv422[i*2*width+4*j+3];
			  printf("%d+%d+%d*%d*%d/4+%d=%d\\n",ynum,ynum/4,k,2,width,j,ynum+ynum/4+k*2*width/4+j);
		   
		    k++;
	   
	   
	   
       return 1;


int main(void)

	int len = 0;
	FILE *fpr, *fpw;
	unsigned char buf[READ_WRITE_FILE_SIZE];
	fpr = fopen( "WEBCAM-00012.YUV", "rb" );
	fpw = fopen( "yuyv_2_yy_u_v.yuv", "wb" );
	if( fpr == NULL || fpw == NULL )
	
		printf("can not read or write file\\n");
		fcloseall();
		return 1;
	
	fread( buf, READ_WRITE_FILE_SIZE, 1, fpr );
	if(YUV422To420(buf,filebuf,176,144))printf("ok\\n");
	printf("size:%d",sizeof(filebuf));
	fwrite( &filebuf, sizeof(filebuf), 1, fpw );
	fcloseall();
	return 0;






以上是关于YUV文件的转换方法的主要内容,如果未能解决你的问题,请参考以下文章

2023-02-25:请用go语言调用ffmpeg,解码mp4文件并保存为YUV420SP格式文件,YUV420P不要转换成YUV420SP。

rgb颜色 红色 转换成yuv颜色空间是啥

C语言怎么截屏并将数据转换成RGB或YUV420

将 YUV_420_888 转换为 JPEG 并保存文件导致图像失真

视频知识点(16)- 如何将y4m文件转换成yuv文件?

将 YUV 数据转换为 Image 格式 Opencl