opencv中两个矩阵相除

art*_*.sw 5 c++ opencv matrix

我想对两个 opencv CV_32S 矩阵(A 和 B)进行逐元素除法。

当 B 不为 0 时,我希望 C = A/B,否则为 0。

但我不确定是否理解 opencv 文档:

http://docs.opencv.org/modules/core/doc/operations_on_arrays.html#divide

它说:

当 src2(I) 为零时,dst(I) 也将为零。多通道阵列的不同通道独立处理。

注意 当输出数组的深度为 CV_32S 时,不应用饱和度。在溢出的情况下,您甚至可能得到错误符号的结果。

saturate() 函数有什么作用?我可以对 CV_32S 矩阵安全地使用divide(A,B,C) 吗?divide() 与 / 运算符有何不同?

=====测试后编辑=====

我的测试表明 / 运算符完全符合我的要求:当 B != 0 时,C = A/B,否则为 0。

Mic*_*cka 2

saturate_cast 可以防止某些数据类型的溢出,从而使像素值200+200减少到255 for CV_8U例如(否则会发生溢出,并且可能会出现意外的值)。

如果您想了解有关 saturate_cast 的更多信息,请查看链接。 http://docs.opencv.org/modules/core/doc/intro.html#saturation-arithmetics

由于整数除法总是减少绝对值,因此整数除法中不应该发生溢出(或者我错过了什么?),所以我想你应该是安全的。