我声明了一个矩阵,它包含的值等于1:cv::Mat::ones(width, height, CV_8U);
现在我要乘以一个常数,我的意思是,一个值等于a =0.3的矩阵然后我写道:简历::垫mat_cal =简历::垫::的(宽度、高度、CV_8U) *;
但是,结果呢?矩阵0 0 0 0 0 0 0 0 0.....
解决方案吗?
您的部分问题是您的矩阵类型是CV_8U
,这是一个8位无符号整数-因此0.3
被截断为0
。而是将其设置为CV_32F
(32位浮点)。
如果我没记错的话,当乘以一个标量时,可以这样做。两个矩阵相乘的方式不同:
float A = 0.3;
cv::Mat mat_cal = cv::Mat::ones(width, height, CV_32F)*A;
char i = 1;
i *= 0.3;
结果吗?0
它只是普通的整数四舍五入。
如果你想要一个双精度或浮点值的Mat,首先使用正确的类型:
cv::Mat::ones(width, height, CV_32F)*0.3f; // float
或:
cv::Mat::ones(width, height, CV_64F)*0.3; // double