YUV422_UYVY图像格式转RGB565

本文介绍了一种将摄像头采集的YUV422格式图像转换为适用于屏幕显示的RGB565格式的方法。通过分析两种格式的特点,并提供具体的C语言实现代码,实现了高效的图像格式转换。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

项目中遇到摄像头采集到的YUV格式图像转换为RGB565:


问题描述

项目一部分是用摄像头来采集图像并且发送到屏幕上预览,但是由于摄像头采集到的图像是YUV422格式的,屏幕上的图像显示需要RGB565格式,所以需要转换,在做这一步之前首先知道俩种格式储存图像数据的方法,RGB565是2个字节共16位,R,G,B颜色分量分别占5个字节,6个字节,5个字节,YUV422格式网上介绍很详细不再赘述。
接下来直接贴源码

代码:

void YUV422toRGB565(const void *inBuff, void *outBuff)
{
	int i=0;
	int index=0;
	int rows = 0;
	int clos = 0;
	int u_value, v_value, y_value1 , y_value2, r, g, b;
	uint8 *yuv_buf;
	uint16 *rbg_buf;

	yuv_buf = (uint8 *)inBuff;
	rbg_buf = (uint16 *)outBuff;

	u_value = 0;
	v_value = 0;
	y_value1 = 0;
	y_value2 = 0;


	for (rows = 0; rows < 240   ; rows++)
	{
		for (clos = 0; clos < 320; clos++)
		{
			y_value1 = yuv_buf[index+1] & 0xff;			 				 
			u_value = (yuv_buf[index]) & 0xff ;    	 					
			y_value2 = yuv_buf[index+3] & 0xff;							 
			v_value = (yuv_buf[index+2]) & 0xff;						 

			r =  RANGE_LIMIT(y_value1 + (1.370705 * (v_value-128)));	
			g =  RANGE_LIMIT(y_value1 - (0.698001 * (v_value-128)) - (0.337633 * (u_value-128)));
			b =  RANGE_LIMIT(y_value1 + (1.732446 * (u_value-128)));

			
			rbg_buf[i++] = ( ( ( r  << 8 ) & 0xf800 ) | ( ( g << 3 ) & 0x7e0 ) | ( (b >> 3) & 0x1f ) );
			index = index+4;
		}
	}
}

注意:

由于YUV422的特殊储存方式,所以每次需要处理2个字节。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值