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 的矩阵......

有什么解决办法吗?

4

2 回答 2

1

您的部分问题是您的矩阵类型是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;
于 2013-03-15T11:38:54.097 回答
0
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
于 2013-03-15T11:38:35.963 回答