【问题标题】:cv::Mat matrix, HOW TO Reduce digits to the right of the decimal point in cv::Mat?cv::Mat 矩阵,如何减少 cv::Mat 中小数点右侧的数字?
【发布时间】:2013-06-07 20:23:55
【问题描述】:

我有一个在 iPhone 屏幕上打印 3x3 cv::Mat 的应用程序。我需要减少小数,因为屏幕不是那么大,请参阅:

[1.004596557012473, -0.003116992336797859, 5.936915104939593; -0.007241746117066327,0.9973985665720294,-0.2118670500989478; 1.477734234970711e-05,-1.03363734495053e-05,1.000089074805124]

所以我想减少小数点 0.4 或 0.6 或六位小数。有什么想法吗?

干杯

【问题讨论】:

    标签: opencv digits decimal mat computer-vision


    【解决方案1】:

    直接 OpenCV 版本

    根据
    http://docs.opencv.org/3.1.0/d3/da1/classcv_1_1Formatter.html选择你想要的基本格式化程序
    然后适配函数 set64fPrecision(或 set32fPrecision)
    然后 cout:

     cv::Ptr<cv::Formatter> formatMat=Formatter::get(cv::Formatter::FMT_DEFAULT);
     formatMat->set64fPrecision(3);
     formatMat->set32fPrecision(3);
     std::cout << "matrix:" << std::endl << formatMat->format( sim ) << std::endl;
    

    【讨论】:

      【解决方案2】:

      如果您使用的是printf

      cv::Mat data(3, 3, CV_64FC1);
      for (int y = 0; y < data.rows; ++y) {
        for (int x = 0;x < data.cols; ++x) {
          printf("%.6f ", data.at<double>(y, x));
        }
      }
      

      如果您使用的是std::cout

      cv::Mat data(3, 3, CV_64FC1);
      std::cout.setf(std::ios::fixed, std:: ios::floatfield);
      std::cout.precision(6);
      for (int y = 0; y < data.rows; ++y) {
        for (int x = 0;x < data.cols; ++x) {
          std::cout<<data.at<double>(y, x)<<" ";
        }
      }
      

      【讨论】:

        猜你喜欢
        • 2014-06-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-12-04
        • 1970-01-01
        • 2021-06-11
        • 1970-01-01
        • 2012-07-17
        相关资源
        最近更新 更多