2013-08-01 167 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上完美工作,这也可以。 –