拍摄色彩距离结果的积分图像(逻辑错误)

时间:2012-03-05 00:32:14

标签: c++ opencv gpu

我正在调试机器人的项目并发现了一个错误,我不太确定如何在理论上修复它。

我必须计算一个颜色距离图,然后我必须拍摄结果的积分图像并用它做一些计算。

使用来自Lab色彩空间图像的A和B通道,使用公式sqrt([A-pA] ^ 2 + [B-pB] ^获得颜色距离,例如红色(pA = 255,pB = 127) 2)

subtract(mA, Scalar(pA), tA);
subtract(mB, Scalar(pB), tB);
tA.convertTo(t32A, CV_32SC1);
tB.convertTo(t32B, CV_32SC1);
pow(t32A, 2.0, powA);
pow(t32B, 2.0, powB);
add(powA, powB, sq);
pow(sq, 0.5, res);
//res.convertTo(result, CV_8UC1);

由于CV_8U处理值高于255的限制,我需要转换为CV_32S。

现在我必须将结果输入到积分图像中,这只需要CV_8UC1的图像。

我面临的问题是上述色彩距离函数可能会产生值大于255的像素。

例如: (0,0)到红色(255,127)之间的距离

sqrt((0-255)^ 2 +(0-127)^ 2)= 285

或介于(0,255)到红色(255,127)

之间

sqrt((0-255)^ 2 +(255-127)^ 2)= 285

是否有人建议如何将结果输入到整体图像中,而不会丢失任何信息。

谢谢

1 个答案:

答案 0 :(得分:1)

如何使用sqrt(2)作为归一化因子?