2013-08-01 4 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, что тоже нормально. –

 Смежные вопросы

  • Нет связанных вопросов^_^