Opencv Mat乘法由常数运算保护,防止溢出



Opencv Mat乘法常数运算保护溢出吗?

Mat m(12,14,CV_8UC1);
float C=12.01;
//...do something with m
m= m*C;

。乘法的结果能大于255吗?

我也找不到操作符*定义在opencv github repo

由于您的图像类型为CV_8UC1,因此结果将始终为[0,255]。

实际操作在matop.cpp中:

MatExpr operator * (const Mat& a, double s)
{
    MatExpr e;
    MatOp_AddEx::makeExpr(e, a, Mat(), s, 0);
    return e;
}

一旦返回MatExpr,它将被转换为正确的类型,并且从float转换到uchar的值总是在[0,255]中。

由于转换使用了saturate_cast,因此超过255的值将始终被饱和为255。

您需要使用CV_32FC1CV_64FC1矩阵来获得"正确"的值。

相关内容

  • 没有找到相关文章

最新更新