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
返回,它将被转换为正确的类型,从 float
到 uchar
的转换给出的值始终在 [0,255].
由于转换使用 saturate_cast,超过 255 的值将始终饱和到 255。
您需要使用 CV_32FC1
或 CV_64FC1
矩阵来获取 "correct" 值。
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
返回,它将被转换为正确的类型,从 float
到 uchar
的转换给出的值始终在 [0,255].
由于转换使用 saturate_cast,超过 255 的值将始终饱和到 255。
您需要使用 CV_32FC1
或 CV_64FC1
矩阵来获取 "correct" 值。