2013-06-07 10 views
6

Ho un'app che stampa un 3x3 cv :: Mat sullo schermo dell'iPhone. Devo ridurre i decimali, poiché lo schermo non è così grande, vedi:cv :: Mat mat, COME Ridurre le cifre a destra del punto decimale in cv :: Mat?

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

quindi mi piacerebbe ridurre i decimali .4 o .6 o sei decimali. Qualche idea?

Acclamazioni

risposta

4

se si stesse utilizzando 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)); 
    } 
} 

Se si sta utilizzando 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)<<" "; 
    } 
} 
3

diretta OpenCV versione

selezionare il formattatore base come lo si desidera, in base alle
http://docs.opencv.org/3.1.0/d3/da1/classcv_1_1Formatter.html
poi adattare la funzione di set64fPrecision (o set32fPrecision)
e poi 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; 
Problemi correlati