Старые, C разрабатывают cvMat матрицы, мог быть передан cvSave () функция для легкой записи в XML-файл. Новый стиль C++ cv::Mat
и cv::Mat_
матрицы не приняты этой функцией.
Ссылка OpenCV имеет раздел по персистентности XML, но эти три класса (FileStorage, FileNode и FileNodeIterator) испытывают недостаток в любом описании или примере, и я не могу выяснить, как использовать их от интерфейса.
Спасибо.
Править: Это на самом деле касается большой другой функциональности в новом интерфейсе C++ OpenCV с Версии 2.1. Документация очень плоха в местах, аргументы функции непоследовательны, и группа пользователей или понятия не имеет или имеет лучшие вещи сделать, чем отвечают на вопросы. Я собираюсь придерживаться старого интерфейса C некоторое время. Документы являются тоннами лучше, не говоря уже о книге O'Reilly.
По-видимому, это проще в стиле 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)
Вышесказанное верно, но в шпаргалке не указано, что вам нужно открыть файл. Это может показаться очевидным, но я не стал этого делать, потому что в шпаргалке не говорилось, что я должен был это делать. вот код, который позволит вам правильно писать в файлы
---------- код:
// 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();
}
Неважно, это все равно не работает. извините за потраченный впустую пост.