我已声明一个包含等于1的值的Matrix: 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 .....
任何解决方案?
答案 0 :(得分: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;
答案 1 :(得分: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