0
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
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
在[0255]總是給值。
由於轉換使用saturate_cast,超過255的值會一直飽和到255
您需要使用CV_32FC1
或CV_64FC1
矩陣得到「正確」的價值觀。
我不明白轉換的細節。如果結果將浮點數大於255,它將轉換爲範圍[0 255]中的隨機值,或者在uchar中始終爲255。 – mrgloom
@mrgloom,看到更新的答案。始終爲255,因爲轉換將使用saturate_cast – Miki