转自:http://blog.csdn.net/Times_poem/article/details/51471438

版权声明:本文为博主原创文章,未经博主允许不得转载。

需求说明:视频处理算法基本知识

      第一部分:有参考出处的RGB与Ycbcr相互转换

      第二部分:简单直接的RGB与Ycbcr相互转换

      第三部分:优化乘法的RGB与Ycbcr相互转换

      


第一部分


来自:http://blog.chinaunix.NET/uid-215617-id-2212957.html


在人脸检测中会用到YCbCr颜色空间,因此就要进行RGB与YCbCr颜色空间的转换,刚开始以为这个很简单,只不是加减乘除的问题,根据公式就可以了,但事实是有很多的公式,我在Baidu上找的,几乎没有什么可以能用的,一般的只有RGB转YCbCr,但是反过来就不行了,算不到正确的结果。
    我在图书馆找到一篇文章《数字RGB与YCbCr颜色空间转换的精度》作者:张懿,刘旭,李海峰,在这篇文章中找到了一个正确的相互转换的公式(也可能有误的)。在下面的公式中RGB和YCbCr各分量的值的范围均为0-255。
公式如下:
//数字RGB与YCbCr颜色空间转换的精度 
//在这两个公式中RGB和YCbCr各分量的值的范围均为0-255。
// RGB转换为YCbCr
// 这个公式来自:Genesis Microchip. gm6010/gm6015 Programming Guide[M]. California US: Genesis Microchip Company, 2002:85-90
// |Y   |    |16  |                    |65.738   129.057  25.06 |   |R|
// |Cb| = |128| + (1/256)*|-37.945  -74.494  112.43| *|G|
// |Cr |    |128|                   |112.439  -94.154  -18.28|   |B|
// YCbCr转换为RGB
// 这个公式来自:Genesis Microchip. gm6015 Preliminary Data Sheet[M]. California US: Genesis Microchip Company, 2001:33-34
//|R|                   |298.082  0               408.58 |   |Y   -16  |
//|G| = (1/256)*|298.082  -100.291 -208.12|* |Cb-128|
//|B|                   |298.082  516.411   0           |   |Cr -128|
加一点我的代码,为什么要加我的代码呢,不是因为写的代码好,只不过是我把上面公式中的矩阵/256算成小数了,这样子我们可以省点时间:

// RGB转换为YCbCr

for(i =0 ; i < dest->dwSize; )
{
 UCHAR r,g,b;
 r = sBuf[i+0];
 g = sBuf[i+1];
 b = sBuf[i+2];
 dBuf[i+0]= (unsigned char)(r * 0.256789 + g * 0.504129 + b * 0.097906)+ 16; 
 dBuf[i+1]= (unsigned char)(r *-0.148223 + g * -0.290992 + b * 0.439215)+ 128;
 dBuf[i+2]= (unsigned char)(r * 0.439215 + g * -0.367789 + b *-0.071426)+ 128; 
 i += 3;
}

// YCbCr转换为RGB

for(i =0 ; i < dest->dwSize; )
{
 UCHAR y,u,v;
 y = sBuf[i+0];
 u = sBuf[i+1];
 v = sBuf[i+2];
 dBuf[i+0]= (unsigned char)(1.164383*(y- 16) + 0 + 1.596027*(v - 128)); 
 dBuf[i+1]= (unsigned char)(1.164383*(y- 16) - 0.391762*(u - 128) - 0.812969*(v - 128)); 
 dBuf[i+2]= (unsigned char)(1.164383*(y- 16) + 2.017230*(u - 128) + 0 );
 i += 3;
}

第二部分

来自:http://blog.csdn.net/a14730497/article/details/17886127


Y:明亮度(Luminance或Luma),也就是灰阶值。“亮度”是透过RGB输入信号来建立的,方法是将RGB信号的特定部分叠加到一起。

Cb:反映的是RGB输入信号蓝色部分与RGB信号亮度值之间的差异。
Cr:反映了RGB输入信号红色部分与RGB信号亮度值之间的差异。

在以下两个公式中RGB和YCbCr各分量的值的范围均为0-255。

RGB转换为YCbCr

Y   = 0.257*R+0.564*G+0.098*B+16
Cb = -0.148*R-0.291*G+0.439*B+128
Cr  = 0.439*R-0.368*G-0.071*B+128

等效为:

Y = (1/8192)[(135168 + 4129G) + (2015R + 803B)]     其他的Cb ,Cr 类似过程

//-------------------------------------------------------------------------------------------------------------------------------

YCbCr转换为RGB

R = 1.164*(Y-16)+1.596*(Cr-128)

G = 1.164*(Y-16)-0.392*(Cb-128)-0.813*(Cr-128)

B = 1.164*(Y-16)+2.017*(Cb-128)

或者

R = 1.164Y                + 1.596Cr - 222.912
G = 1.164Y - 0.391Cb - 0.813Cr + 135.488
B = 1.164Y + 2.018Cb                - 276.928

等效为:

R >> 9 = 596Y          + 817Cr - 114131
G >> 9 = 596Y - 200Cb  - 416Cr + 69370
B >> 9 = 596Y + 1033Cb         - 141787

第三部分


来自: http://www.cnblogs.com/qiweiwang/archive/2011/07/07/2099731.html


YCbCr转RGB的公式如下:

R = 1.164(Y-16) + 1.596(Cr-128);
G = 1.164(Y-16) - 0.391(Cb-128) - 0.813(Cr-128);
B = 1.164(Y-16) + 2.018(Cb-128);


其中的系数可以表示成


1.164  = 1 + 1/2^3 + 1/2^5 + 1/2^7;
1.596  = 1 +1/2+ 1/2^4 + 1/2^5;
0.391  = 1/2^2 + 1/2^3 + 1/2^6;
0.813  = 1/2 + 1/2^2 + 1/2^4;
2.018  = 2 + 1/2^6;

故而,上述公式可以转化成没有乘法的公式,大大提高了运算的效率。


整理来自:时间的诗




本文转自张昺华-sky博客园博客,原文链接:http://www.cnblogs.com/sky-heaven/p/7217544.html,如需转载请自行联系原作者


视频图像处理基础知识5(RGB与Ycbcr相互转换公式 )【转】相关推荐

  1. 视频图像处理基础知识5(RGB与Ycbcr相互转换公式 )

    需求说明:视频处理算法基本知识       第一部分:有参考出处的RGB与Ycbcr相互转换       第二部分:简单直接的RGB与Ycbcr相互转换       第三部分:优化乘法的RGB与Ycb ...

  2. 视频图像处理基础知识4(视频分辨率参考 行频 隔行扫描 逐行扫描)【转】

    转自:http://blog.csdn.net/Times_poem/article/details/51470065 版权声明:本文为博主原创文章,未经博主允许不得转载. 需求说明:视频处理基本知识 ...

  3. 视频图像处理基础知识4(视频分辨率参考 行频 隔行扫描 逐行扫描)

    需求说明:视频处理基本知识       第一部分:视频分辨率参数       第二部分:分辨率.行频.场频  第一部分:视频分辨率参数 1080p的画面分辨率为1920×1080 [视频分辨率参考]共 ...

  4. 视频图像处理基础知识0(双线性插值算法进行图像缩放)【转】

    转自:http://blog.csdn.net/times_poem/article/details/51395781 版权声明:本文为博主原创文章,未经博主允许不得转载. 目录(?)[-] 双线性插 ...

  5. python图像处理基础知识(cv库函数说明)

    python图像处理基础知识,函数说明 目录 python图像处理基础知识,函数说明 1.处理照片(open_cv库) 1.1 cv2.imread('filepath',flags) 1.2 cv2 ...

  6. 图像处理基础知识总结1

    图像处理基础知识总结(1) 前言:从接触图像处理.生物特征识别.视频编解码.机器学习已两年有余,还没有系统的总结过,正好最近刷一下Tsinghua的Tipa课件和PKU的Digital Image P ...

  7. python图像处理基础知识(plt库函数说明)

    python图像处理基础知识,plt库函数说明 目录 python图像处理基础知识,plt库函数说明 1.画图(plt库) 1.1 plt.figure(num='',figsize=(x, y),d ...

  8. 理解HLS流及数字视频的基础知识

    HLS (HTTP Live Streaming) HLS是一种基于HTTP的流媒体协议. HLS的工作原理 HLS的工作原理是将流分解为一系列小数据包. 在流会话开始时,HLS下载一个扩展名为M3U ...

  9. 音视频知多少(1)声音与视频的基础知识

    前言 最近新加入的公司在嵌入式音视频方面算是全国领先水平,因而在完成自己本职的工作的时候有必要在这一方面做一系列的提升,以跟上其他同事的世界,不光光只支持BSP的能力,在我看来也是需要将视频流作为自己 ...

最新文章

  1. BCH收银APP已在Android系统上下载超10000次
  2. 软件质量保证与测试文档怎么写,软件质量保证与测试整理版.pdf
  3. 野火STM32F103教学视频完整目录(配合霸道-指南者开发板)
  4. Shell多线程操作及线程数控制实例
  5. 2019年JavaScript状态调查中的新增功能
  6. gitlable iphone_iPhone 12首批用户成“小白鼠”,“信号故障”躺枪者无数
  7. 《Storm入门》中文版
  8. Android开发学习之电话、短信、联系人
  9. 修辞结构理论论文集合
  10. .NET Core 获取 Request/Headers 等信息
  11. 语音识别之语音数据预处理
  12. 练习4.4 萨提亚冰山理论应用
  13. linux下搜索丢失分区,找回丢失的Linux分区拯救我的硬盘
  14. 浙江2段线能上什么计算机学校,二段线考生看过来!这些浙江省内热门高校还有热门专业可捡漏...
  15. mysql键值相同_mysql什么是键值重复
  16. JavaEE-01-温故(集合、泛型、io、多线程)知新(junit、内省、路径问题)
  17. Word 神器 python-docx
  18. $().each() 和 $.each()
  19. 在html中控制自动换行 1
  20. System.IO.FileNotFoundException:“未能加载文件或程序集“System.Runtime, Version=5.0.0.0, Culture=neutral, Public

热门文章

  1. CDN缓存加速系统wdcdn2.9版本发布(20120526)
  2. php 触发远程js,javascript – 提供JS或iframe,如分析和statcounter到其他网页,以远程运行我的PHP JS脚本...
  3. python 爬虫 scrapy 爬取搜狗网址导航
  4. python——设计Bird、fish类
  5. 云计算机登录微信,如何用计算机微信打开微云
  6. 批量重命名,如何批量替换文件名部分文字
  7. FFmpeg之av_err2str、av_ts_buff、av_ts2str、av_ts2timestr报错解决方案
  8. Kotlin String 正则表达式,快速测试正则表达式
  9. ABP天坑--UOW自动保存修改
  10. 数家私募拟收购惠普企业 金额或达400亿美元