c++ - 除以 OpenCV Mat 会产生意想不到的结果

标签 c++ opencv

我正在尝试在图像和内核之间进行一些卷积,因此我的结果并不是很大,我一直在尝试事先将内核标准化到 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/

相关文章:

c++ - 通过原始指针访问的 vector 元素意外更改值

c++ - C++中的动态参数化构造函数问题

c++ - 在 C++ DLL 中使用 C 风格导出 API 之间公共(public)类的方法

c++ - 奇怪的符号被附加在最后

C++ 保护类的私有(private) char *

python - OpenCV NAO错误read()

android - 增强现实 3D 模型渲染

python - OpenCV:了解 warpPerspective/透视变换

python - 如何进行视频取景?

python - 打开 CV RTSP 相机缓冲区滞后