图像格式RGB24转YUV422(YUYV)转换代码

来源:互联网 发布:互联网金融网络平台 编辑:程序博客网 时间:2024/05/16 17:17

由于课题项目的需要,需要一张YUV422格式的图像数据,在网上找了好久,没有现成的代码,只有公式,于是自己写了一个,有什么错误请大家多多指教:

/************************************************************************//* 按照opencv数据存储格式,函数传参顺序为b、g、r                        *//************************************************************************/void yuv2rgb_pixel(uchar b, uchar g, uchar r, uchar &y, uchar &u, uchar &v){//rgb转yuv公式,参考资料<a target=_blank href="http://www.cnblogs.com/dwdxdy/p/3713990.html">http://www.cnblogs.com/dwdxdy/p/3713990.html</a>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

0 0