2013-06-07 41 views
6

Tôi có một ứng dụng in ra 3x3 cv :: Mat trên màn hình iPhone. Tôi cần phải giảm số thập phân, vì màn hình không quá lớn, hãy xem:cv :: Mat ma trận, CÁCH GIẢM chữ số ở bên phải dấu thập phân trong cv :: Mat?

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

vì vậy tôi muốn giảm số thập phân .4 hoặc .6 hoặc sáu số thập phân. Bất kỳ ý tưởng?

Cheers

Trả lời

4

Nếu bạn đang sử dụng 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)); 
    } 
} 

Nếu bạn đang sử dụng 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

trực tiếp OpenCV phiên bản

chọn định dạng cơ sở như bạn muốn, theo
http://docs.opencv.org/3.1.0/d3/da1/classcv_1_1Formatter.html
sau đó điều chỉnh chức năng set64fPrecision (hoặc set32fPrecision)
và sau đó 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; 
Các vấn đề liên quan