繁体   English   中英

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

[英]Dividing OpenCV Mat gives unexpected result

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

我的内核从 -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 文档 divide运算符与您的想法不同:对于它计算的每个元素:

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

虽然您期望:

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

我认为你应该这样做:

kernel = kernel / maxVal;

(不确定这会起作用;但只要确保你有一个真正的元素划分)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM