그림 형식 RGB24 - YUV422 변환 코드

1651 단어
과제 프로젝트의 수요로 인해 YUV422 형식의 이미지 데이터가 필요합니다. 인터넷에서 오랫동안 찾았는데 기존의 코드가 없고 공식만 있습니다. 그래서 제가 하나 썼습니다. 무슨 오류가 있으면 많이 가르쳐 주십시오.
4
/************************************************************************/
/*   opencv      ,       b、g、r                        */
/************************************************************************/
void yuv2rgb_pixel(uchar b, uchar g, uchar r, uchar &y, uchar &u, uchar &v)
{
	//rgb yuv  ,    http://www.cnblogs.com/dwdxdy/p/3713990.html
	y = 0.299 * r + 0.587 * g + 0.114 * b;
	u = -0.1687 * r -  0.3313 * g + 0.5 * b + 128;
	v = 0.5 * r - 0.4187 * g -0.0813 * b + 128;
}

/************************************************************************/
/* rgb24 yuv422                                                        */
/************************************************************************/
void yuv2rgb_image(uchar *pRgb, uchar *pYuv, int width, int height)
{
	//      rgb      yuyv  ,  ,width  2   
	int width1 = width = width / 2 * 2;

	for(int h = 0; h < height; h ++)
	{
		uchar *ptr1 = pRgb + h * width * 3;
		uchar *ptr2 = pYuv + h * width * 2;

		for(int w = 0; w < width1; w += 2)
		{
			uchar y1, u1, v1, y2, u2, v2;
			yuv2rgb_pixel(*ptr1 ++, *ptr1 ++, *ptr1 ++, y1, u1, v1);
			yuv2rgb_pixel(*ptr1 ++, *ptr1 ++, *ptr1 ++, y2, u2, v2);
			//u、v      
			uchar u = (u1 + u2) / 2;
			uchar v = (v1 + v2) / 2;
			*ptr2 ++ = y1;
			*ptr2 ++ = u;
			*ptr2 ++ = y2;
			*ptr2 ++ = v;
		}
	}
}
YUV422-RGB 참조 가능http://www.cnblogs.com/lknlfy/archive/2012/04/09/2439508.html

좋은 웹페이지 즐겨찾기