2013-06-07 16 views
6

Mam aplikację, która drukuje 3x3 cv :: Mat na ekranie iPhone'a. Muszę zmniejszyć liczbę miejsc po przecinku, ponieważ ekran nie jest taki duży, patrz:cv :: Mat matrix, JAK ZMNIEJSZYĆ cyfry po prawej stronie separatora dziesiętnego w cv :: Mat?

[1.004596557012473, -0.003116992336797859, 5.936915104939593; -0,007241746117066327, 0,9973985665720294, -0,2118670500989478; 1.477734234970711e-05, -1.03363734495053e-05, 1.000089074805124]

dlatego chciałbym zmniejszyć dziesiętne .4 lub .6 lub sześć miejsc dziesiętnych. Jakieś pomysły?

Cheers

Odpowiedz

4

Jeśli uzywasz 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)); 
    } 
} 

Jeśli uzywasz 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

bezpośredni OpenCV wersję

wybrać jako podstawy formatowania chcesz, według
http://docs.opencv.org/3.1.0/d3/da1/classcv_1_1Formatter.html
następnie dostosować set64fPrecision function (lub set32fPrecision)
a następnie 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;