Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/150.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 拍摄彩色距离结果的积分图像(逻辑错误)_C++_Opencv_Gpu - Fatal编程技术网

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

C++ 拍摄彩色距离结果的积分图像(逻辑错误),c++,opencv,gpu,C++,Opencv,Gpu,我正在调试一个机器人的项目,发现了一个错误,我不太确定如何从理论上修复它 我必须计算一个彩色距离图,然后我必须得到结果的积分图像,并用它做一些计算 使用实验室彩色间隔图像的A和B通道,我使用公式sqrt([A-pA]^2+[B-pB]^2)获得颜色距离,例如红色(pA=255,pB=127) 我需要转换为CV_32S,因为CV_8U处理值超过255的限制 现在我必须将结果输入到积分图像中,这只需要CV_8UC1的图像 我面临的问题是,前面提到的颜色距离函数可能会生成值大于255的像素 例如: (

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

我必须计算一个彩色距离图,然后我必须得到结果的积分图像,并用它做一些计算

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

我需要转换为CV_32S,因为CV_8U处理值超过255的限制

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

我面临的问题是,前面提到的颜色距离函数可能会生成值大于255的像素

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

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

或介于(0255)到红色(255127)之间

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

有人对我如何在不丢失任何信息的情况下将结果输入到完整图像中有什么建议吗


谢谢你

使用sqrt(2)作为标准化因子怎么样?

我想你想纠正你例子中的错误。这个例子有什么问题,我已经重写了,也许现在更有意义了……我不明白你的解决方案。。。你能详细说明一下吗?提前感谢您从这种比较中可以得到的最大值是sqrt(255^2+255^2)。要使其在0到255的范围内,可以使用sqrt(2)将其除以。因此,如果用sqrt(2)除以任何这样的值,可以保证结果会在0到255之间。Okidoki,看起来很简单。
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);