图像 YUV与RGB格式转换
来源:互联网 发布:js的闭包是什么 编辑:程序博客网 时间:2024/06/18 13:45
YUV格式具有亮度信息和色彩信息分离的特点,但大多数图像处理操作都是基于RGB格式。
因此当要对图像进行后期处理显示时,需要把YUV格式转换成RGB格式。
RGB与YUV的变换公式如下:
YUV(256 级别) 可以从8位 RGB 直接计算:
Y = 0.299 R + 0.587 G + 0.114 BU = - 0.1687 R - 0.3313 G + 0.5 B + 128V = 0.5 R - 0.4187 G - 0.0813 B + 128
反过来,RGB 也可以直接从YUV (256级别) 计算:
R = Y + 1.402 (V-128)G = Y - 0.34414 (U-128) - 0.71414 (V-128)B = Y + 1.772 (U-128)
例程:
按照YUV与RGB的变换公式,逐像素访问Y、U、V分量的值,并转换成RGB:
bool YV12ToBGR24_Native(unsigned char* pYUV,unsigned char* pBGR24,int width,int height){ if (width < 1 || height < 1 || pYUV == NULL || pBGR24 == NULL) return false; const long len = width * height; unsigned char* yData = pYUV; unsigned char* vData = &yData[len]; unsigned char* uData = &vData[len >> 2]; int bgr[3]; int yIdx,uIdx,vIdx,idx; for (int i = 0;i < height;i++){ for (int j = 0;j < width;j++){ yIdx = i * width + j; vIdx = (i/2) * (width/2) + (j/2); uIdx = vIdx; bgr[0] = (int)(yData[yIdx] + 1.732446 * (uData[vIdx] - 128)); // b分量 bgr[1] = (int)(yData[yIdx] - 0.698001 * (uData[uIdx] - 128) - 0.703125 * (vData[vIdx] - 128)); // g分量 bgr[2] = (int)(yData[yIdx] + 1.370705 * (vData[uIdx] - 128)); // r分量 for (int k = 0;k < 3;k++){ idx = (i * width + j) * 3 + k; if(bgr[k] >= 0 && bgr[k] <= 255) pBGR24[idx] = bgr[k]; else pBGR24[idx] = (bgr[k] < 0)?0:255; } } } return true;}
0 0
- 图像 YUV与RGB格式转换
- YUV与RGB格式转换
- YUV与RGB格式转换
- YUV与RGB格式转换
- YUV与RGB格式转换
- YUV与RGB格式转换
- 视频与图像RGB/YUV格式详解
- 视频与图像RGB/YUV格式详解
- 视频与图像RGB/YUV格式详解
- 视频与图像RGB/YUV格式详解
- 视频与图像RGB/YUV格式详解
- 视频与图像RGB/YUV格式详解
- 视频与图像RGB/YUV格式详解
- 视频与图像RGB/YUV格式详解
- 视频与图像RGB/YUV格式详解
- 视频与图像RGB/YUV格式详解
- 视频与图像RGB/YUV格式详解
- 视频与图像RGB/YUV格式详解
- css---border属性实现小三角型
- java程序运行时内存分配详解
- HDOJ 1142 A Walk Through the Forest(最短路+记忆化搜索)
- 1.2 template (模板) 简介
- C++补作业(分数)得了2个0分
- 图像 YUV与RGB格式转换
- ECS API中Signature错误的排查方法
- tomcat的形象解析
- 蓝桥杯—国王的烦恼
- Spring学习八:Spring事件处理
- [18]浏览器检测
- 使用IDEA或Studio上传项目到Github中
- 一天搞定jQuery(一)——使用jQuery完成定时弹出广告
- 数据库1