【问题标题】:Declaring a Matrix with the same values with openCV使用 openCV 声明具有相同值的矩阵
【发布时间】:2013-03-15 23:25:20
【问题描述】:

我已经声明了一个包含等于 1 的值的矩阵: cv::Mat mat_cal = cv::Mat::ones(宽度, 高度, CV_8U);

现在我想乘以一个常数,我的意思是,一个值等于 A=0.3 的矩阵 然后我写道: cv::Mat mat_cal = cv::Mat::ones(宽,高, CV_8U)*A;

但是,结果呢? 0 0 0 0 0 0 0 0 的矩阵.....

有什么办法吗?

【问题讨论】:

    标签: c++ visual-studio-2010 opencv


    【解决方案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;
    

    【讨论】:

      【解决方案2】:
      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
      

      【讨论】:

      • 做一个书呆子——不是四舍五入,而是截断。舍入意味着如果double i >= 0.5;int(i) = 1;,而实际上int(i) = 0;。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-09-25
      • 2015-08-12
      • 2022-01-01
      • 2021-05-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多