2013-06-07 10 views
6

Ich habe eine App, die eine 3x3 cv :: Mat auf dem iPhone-Bildschirm druckt. Ich muss die Dezimalstellen reduzieren, da der Bildschirm nicht so groß ist, siehe:cv :: Mat matrix, WIE Reduzieren Ziffern nach rechts vom Dezimalpunkt in cv :: Mat?

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

Also ich möchte die Dezimalstellen .4 oder .6 oder sechs Dezimalstellen reduzieren. Irgendwelche Ideen?

Prost

Antwort

4

Wenn Sie 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)); 
    } 
} 

wurden unter Verwendung Wenn Sie 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

direkte OpenCV Version

die Basis Formatierer wählen Verwendung wurden als Sie möchten, nach
http://docs.opencv.org/3.1.0/d3/da1/classcv_1_1Formatter.html
dann die Funktion set64fPrecision anzupassen (oder set32fPrecision)
und dann 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; 
Verwandte Themen