Opencv Mat乘以常量运算保护溢出?

Opencv Mat multiplication by constant operation protected of overflow?

Opencv Mat乘以常量运算是否有溢出保护?

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

即乘法的结果可以大于255吗?

我在opencv中也找不到operator *的定义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 返回,它将被转换为正确的类型,从 floatuchar 的转换给出的值始终在 [0,255].

由于转换使用 saturate_cast,超过 255 的值将始终饱和到 255。

您需要使用 CV_32FC1CV_64FC1 矩阵来获取 "correct" 值。