RGB 转换 Ycbcr 调用 C++和MATLAB中的函数,得到了两种不同的运算结果

48 篇文章 10 订阅
39 篇文章 0 订阅


在用MATLAB 做完算法测试后,得到了图片较为理想的白平衡处理效果,但是在将算法移植到 C++过程中,得到的结果却很不理想,

逐过程 比较发现,是对彩色图像RGB 转换为 YCbCr过程中  调用的两个算法 的计算公式 是不一样的 。

需要注意的 : 

1、 c++ 用opencv中读入的彩色图像 是 BGR色彩格式的。

MATLAB 读入的图像是 RGB格式的。

2、C++中的算法是采用 线性计算得到的,没有找打计算的源码,但是自己写了一个,与调用函数cvCvtColor结果一致,具体参数如下:


  cvtColor(img,rgb,COLOR_RGB2BGRA);  // 转换结果 rgb为4通道,第4通道默认255
  cvtColor(rgb, ycbr, COLOR_RGB2YCrCb);  //  转换结果 ycbr 为3通道
 
  double Yp = 0.299 * 51 + 0.578 * 22 + 0.114 * 18;
  double Cbp = (-0.1687 * 51 - 0.3313 * 22 + 0.5 * 18)+128;
  double Crp = (0.500 * 51 - 0.4187 * 22 - 0.0813 * 18)+128;

MATLAB 中算法 的参数 是另一套参数 : 


% T is from equation 9.6: ycbcr = origT * rgb + origOffset;
origT = [65.481 128.553 24.966;...
    -37.797 -74.203 112; ...
    112 -93.786 -18.214];
origOffset = [16;128;128];





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值