OpenCV两个Mat相减的隐藏秘密

起因

今天在看同事写的代码时,发现一个“错误”:
他的原意是实现以下功能:

cv::Mat absDiff;
cv::absdiff(mat1, mat2, absDiff);

其中mat1mat2均为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]

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值