Как я могу сохранить и считать из XML новые объекты матрицы стиля C++ в OpenCV?

Старые, C разрабатывают cvMat матрицы, мог быть передан cvSave () функция для легкой записи в XML-файл. Новый стиль C++ cv::Mat и cv::Mat_ матрицы не приняты этой функцией.

Ссылка OpenCV имеет раздел по персистентности XML, но эти три класса (FileStorage, FileNode и FileNodeIterator) испытывают недостаток в любом описании или примере, и я не могу выяснить, как использовать их от интерфейса.

Спасибо.

Править: Это на самом деле касается большой другой функциональности в новом интерфейсе C++ OpenCV с Версии 2.1. Документация очень плоха в местах, аргументы функции непоследовательны, и группа пользователей или понятия не имеет или имеет лучшие вещи сделать, чем отвечают на вопросы. Я собираюсь придерживаться старого интерфейса C некоторое время. Документы являются тоннами лучше, не говоря уже о книге O'Reilly.

13
задан Jav_Rock 11 June 2012 в 20:46
поделиться

2 ответа

По-видимому, это проще в стиле C ++, но, как вы сказали, нет легкодоступной документации.

Чтобы записать cv :: Mat в файл, просто создайте переменную FileStorage , а затем запишите матрицу в стиле, который вы используете cout для печати на экране. .

cv::Mat someMatrix;
//you create and assign values to someMatrix however you plan to.
FileStorage fs("myFile.yml", FileStorage::WRITE);
fs << "name_to_identify_matrix_by" << someMatrix;

Чтение также похоже на стиль cin, но лучше взгляните на ссылку ниже, чтобы лучше понять. На 2-й странице в разделе «Ввод-вывод данных» они показали примеры использования XML / YAML.

Шпаргалка по opencv C ++ (отличается от шпаргалки в документации PDF)

15
ответ дан 1 December 2019 в 21:52
поделиться

Вышесказанное верно, но в шпаргалке не указано, что вам нужно открыть файл. Это может показаться очевидным, но я не стал этого делать, потому что в шпаргалке не говорилось, что я должен был это делать. вот код, который позволит вам правильно писать в файлы

---------- код:

// write Mat objects to the freakin file
FileStorage fs("CamModel.yml", FileStorage::WRITE);
if (!fs.isOpened()){
 fs.open("CamModel.yml", FileStorage::WRITE);
 fs << "mtxCam" << cameraMatrix;
 fs << "mtxDist" << distCoeffs;
 fs.release();
}

// to test that it really worked, read the Mats back in
if (!fs.isOpened()){
 fs.open("CamModel.yml", FileStorage::READ);
 fs["mtxCam"] >> cameraMatrix;
 fs["mtxDist"] >> distCoeffs;
 fs.release();
}

Неважно, это все равно не работает. извините за потраченный впустую пост.

9
ответ дан 1 December 2019 в 21:52
поделиться
Другие вопросы по тегам:

Похожие вопросы: