我已经声明了一个包含等于 1 的值的矩阵: cv::Mat mat_cal = cv::Mat::ones(width, height, CV_8U);
现在我想乘以一个常数,我的意思是,一个矩阵的值等于 A=0.3 然后我写: cv::Mat mat_cal = cv::Mat::ones(width, height, CV_8U)*A ;
但是,结果呢?0 0 0 0 0 0 0 0 的矩阵......
有什么解决办法吗?
我已经声明了一个包含等于 1 的值的矩阵: cv::Mat mat_cal = cv::Mat::ones(width, height, CV_8U);
现在我想乘以一个常数,我的意思是,一个矩阵的值等于 A=0.3 然后我写: cv::Mat mat_cal = cv::Mat::ones(width, height, CV_8U)*A ;
但是,结果呢?0 0 0 0 0 0 0 0 的矩阵......
有什么解决办法吗?
您的部分问题是您的矩阵类型是CV_8U
一个 8 位无符号整数 - 因此0.3
被截断为0
. 而是将其设置为CV_32F
(32 位浮点)。
另外,如果我记得,当乘以标量时,您可以执行以下操作。将 2 个矩阵相乘的工作方式不同:
float A = 0.3;
cv::Mat mat_cal = cv::Mat::ones(width, height, CV_32F)*A;
char i = 1;
i *= 0.3;
结果 ?0
这只是普通的旧整数舍入。
如果您想要具有 double 或 float 值的 Mat,请首先使用正确的类型:
cv::Mat::ones(width, height, CV_32F)*0.3f; // float
或者:
cv::Mat::ones(width, height, CV_64F)*0.3; // double