2011-08-02 41 views
29

Làm cách nào để chuyển đổi cv :: Mat của loại CV_32FC1 thành loại CV_64FC1 (tương đương với thay đổi từ float sang gấp đôi)?chuyển đổi Ma trận loại CV_32FC1 thành CV_64FC1

Tôi đang mở một Ma trận đã được lưu dưới dạng XML (cvSave) nhưng dưới dạng phao. Điều này có nghĩa là trường <dt> có giá trị f trong tệp. Tôi cần thay đổi nó thành d để mở. Nhưng tôi không muốn làm điều này, thay vào đó tôi muốn mở nó trực tiếp như một Ma trận với các thành phần của kiểu double, hoặc chuyển đổi nó sau này từ float sang gấp đôi.

Dưới đây là mã của tôi để mở tệp.

/** Load cv::Mat from XML file. 
*/ 
cv::Mat loadMat(const std::string filename) 
{ 
    cv::Mat result; 
    cv::FileStorage fs(filename, cv::FileStorage::READ); 
    fs.getFirstTopLevelNode() >> result; 
    return result; 
} 

Trả lời

51

OK, tôi là một người khiếm thị. Dưới đây là cách thực hiện:

Có hàm convertTo thực hiện chính xác những gì tôi muốn.

Cảm ơn bạn đã matrix type conversion in opencv vì đã chỉ ra điều này.

Sau đây là cách tôi làm điều đó:

cv::Mat A = loadMat("mymat.xml"); // See function loadMat in the question! 
A.convertTo(A, CV_64F); 
+6

Ngoài ra, nếu bạn đang chuyển đổi từ một cái gì đó giống như 16u để 8U, bạn cần phải thêm một yếu tố rộng như một tham số thứ ba. 'A.convertTo (A, CV_8UC1, 255.0/65536.0);' –

Các vấn đề liên quan