在用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];