6

iPhone の画面に 3x3 の cv::Mat を出力するアプリがあります。画面がそれほど大きくないため、小数点以下を減らす必要があります。次を参照してください。

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

だから私は小数点以下を.4または.6または6桁に減らしたいと思います。何か案は?

乾杯

4

2 に答える 2

8

ダイレクト OpenCV バージョン


http://docs.opencv.org/3.1.0/d3/da1/classcv_1_1Formatter.html に従って、必要に応じて基本フォーマッタを選択し
、関数 set64fPrecision (または set32fPrecision)
を適応させてから、次のように計算します。

 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;
于 2016-11-18T08:58:46.413 に答える
4

使用していた場合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)<<" ";
  }
}
于 2013-06-07T20:39:49.903 に答える