gpt4 book ai didi

c++ - 划分 OpenCV Mat 给出了意想不到的结果

转载 作者:搜寻专家 更新时间:2023-10-31 02:16:05 26 4
gpt4 key购买 nike

我正在尝试在图像和内核之间做一些卷积,所以我的结果并不是很大,我一直在尝试预先将内核标准化到 0 到 1 之间的范围。我正在使用 CV_32FC1 Mat 类型,我的图像是灰度的。

我的内核从 -1 到 1 的范围开始。我减去最低值,给出 0 到 2 的范围,然后除以最大值,理论上应该是 0 到 1 的范围。但是,经过此除法后,值的范围变为 0 到 358。(我将这些数字四舍五入 - 让我知道实际的精确值是否有帮助。)

这是我的代码:

double minVal; double maxVal;
minMaxLoc(kernel, &minVal, &maxVal);
kernel = kernel - minVal;
minMaxLoc(kernel, &minVal, &maxVal);
divide(maxVal, kernel, kernel);

那么,为什么会这样呢?我觉得也许我遇到了内存或溢出问题,但我认为我所有的值都在 32F 可以存储的范围内。修复会很好,但我最感兴趣的是原因。

最佳答案

来自 opencv documentation ; divide 运算符并不像您想象的那样:对于它计算的每个元素:

dst(I) = saturate(scale/src2(I))

当你期待的时候:

dst(I) = saturate(src2(I)/scale)

我认为你应该这样做:

kernel = kernel / maxVal;

(不确定这是否有效;但只要确保您有一个真正的元素划分)。

关于c++ - 划分 OpenCV Mat 给出了意想不到的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37479185/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com