划分 OpenCV 垫会产生意想不到的结果
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;
(不确定这是否有效;但只要确保你有一个真正的元素划分)。
相关文章:
- 为什么在递归中使用循环会产生意想不到的结果?
- 字符到int8_t转换会产生意想不到的结果?
- libc++ 对 std::map/set::equal_range 的实现给出了意想不到的结果
- 微小加密算法实现会产生意想不到的结果
- 使用 std::set 的 .begin() 和 .end() 函数会产生意想不到的结果
- 在我的C++链表实现中取消引用节点指针,给出意想不到的结果
- C++正则表达式Visual Studio Community 2015给出<regex>意想不到的结果
- istringstream int8_t产生意想不到的结果
- 划分 OpenCV 垫会产生意想不到的结果
- 提升精神,提升任何意想不到的结果
- regex_match给出意想不到的结果
- 从 PASCAL 到 C++ 的代码转换给出了意想不到的结果
- 意想不到的结果c++
- 在lambda上使用条件运算符调用std::any_of会得到意想不到的结果
- vector::insert在VS2010中执行意想不到的结果
- list resize会产生意想不到的结果
- CUDA: 2D数组索引产生意想不到的结果
- 将字符串转换为整数会产生意想不到的结果
- 在c++中,一些宏语句可能会产生意想不到的结果
- Visual Studio可变宏展开会产生意想不到的结果