2013-08-01 115 views
2

我正在嘗試保存相機矩陣和失真合作效率供以後使用,但是我寫的代碼似乎不起作用。它不會在yml文件中存儲任何類型的數據。即使我讀回來,它也不會輸入任何內容到指定的矩陣。 請幫我理解我是否做錯了什麼。 我使用VS2010與OpenCV的2.4.5FileStorage OpenCV

cv::Mat CameraMatrix, DistCoeffs; 
    CameraMatrix = (cv::Mat_<double>(3,3) << 1,2,3,4,5,6,7,8,9); 
    DistCoeffs = (cv::Mat_<double>(1,5) << 10, 11, 12, 13, 15); 
    cv::FileStorage fs("IntCali.yml", cv::FileStorage::WRITE); 
    fs << "CameraMatrix" << CameraMatrix; 
    fs << "DistCoeffs" << DistCoeffs; 
    fs.release(); 

    cv::FileStorage fs2("IntCali.yml", cv::FileStorage::READ); 
    cv::Mat cm; fs2["CameraMatrix"] >> cm; 
    cv::Mat dc; 
    fs2["DistCoeffs"] >> dc; 
     fs2.release(); 
+0

請提供您的錯誤。 – Khashayar

+0

輸出OpenCV Mat的快速方法是執行此操作:cout << CameraMatrix << endl;在將它們寫入文件之前,對您的CameraMatrix和DistCoeffs執行此操作,以檢查它們是否已正確初始化。同樣檢查它們是否被正確讀回。你的代碼一目瞭然...... – lightalchemist

+0

Btw你可以打開IntCali.yml文件來檢查它的內容。這只是一個文本文件。 – lightalchemist

回答

0
<?xml version="1.0"?> 
-<opencv_storage> 
-<CameraMatrix type_id="opencv-matrix"> 
<rows>3</rows> 
<cols>3</cols> 
<dt>d</dt> 
<data> 1. 2. 3. 4. 5. 6. 7. 8. 9.</data> 

</CameraMatrix>-<DistCoeffs type_id="opencv-matrix"> 
<rows>1</rows> 
<cols>5</cols> 
<dt>d</dt> 
<data> 10. 11. 12. 13. 15.</data> 
</DistCoeffs> 
</opencv_storage> 

工程在XML文件中。如果沒有對yml文件的特殊要求,請嘗試xml。

+0

或yaml上完美工作,這也可以。 –