起因
今天在看同事写的代码时,发现一个“错误”:
他的原意是实现以下功能:
cv::Mat absDiff;
cv::absdiff(mat1, mat2, absDiff);
其中mat1和mat2均为CV_8UC1类型。
但是可能是一时没想起这个函数,于是他写成了这个样子:
cv::Mat absDiff = cv::abs(mat1 - mat2);
问题
于是我认真地告诉他,这样做是错的。假设mat1为[0],mat2为[255],那么mat1 - mat2将会得到[0],因为cv::saturate_cast<uchar>(0 - 255) == 0。则cv::abs([0])自然就是[0],而他的期望是得到[255]。
并且我写出如下代码证明他是错的:
cv::Mat diff = mat1 - mat;
结果diff确实是[0]。那么cv::Mat absDiff = cv::abs(diff);肯定就是[0]了。
但是他坚持让我用<


2981

被折叠的 条评论
为什么被折叠?



