Калибровка камеры OpenCV

я использую калибровку камеры с помощью учебника OpenCV (http://docs.opencv.org/doc/tutorials/calib3d/camera_calibration/camera_calibration.html). Когда я использую видеофайл .mp4 в качестве входных данных, моя программа не работает и выдает эту ошибку:
Ошибка синтаксического анализа (): допустимый XML должен начинаться с ») в icvXMLParse, файл …….. \ opencv \ modules \ core \ src \ persistence.cpp, строка 2252

Может ли кто-нибудь сказать мне, что я делаю не так?

1

Решение

В примере (camera_calibration.cpp) внесите это изменение в метод readStringList:

было:

static bool readStringList( const string& filename, vector<string>& l )
{
l.clear();
FileStorage fs(filename, FileStorage::READ);
if( !fs.isOpened() )
return false;

должно быть:

static bool readStringList( const string& filename, vector<string>& l )
{
l.clear();
FileStorage fs;
try {
fs.open(filename, FileStorage::READ);
}
catch (...) {
return false;
}
if( !fs.isOpened() )
return false;

Тогда вы можете использовать имя файла видео вместо входного файла xml, и программа не будет аварийно завершать работу. Конструктор FileStorage и метод open выдают исключение, если входной файл не является xml / yml, и исключение необходимо перехватить.

1

Другие решения

Отлично сработано. У меня была та же проблема, и я исправил, следуя вашей точке, применяя попытку … поймать …

C: \ OpenCVProjects \ ConsoleApplication1 \ x64 \ Release> ConsoleApplication1.exe -w 9 —
h 6 -s 2 -o camera.yml -op -oe video.mp4

Когда в качестве входного сигнала используется живое видео с камеры, следующие горячие клавиши могут быть
используемый:
, ‘q’ — выйти из программы
‘g’ — начать захват изображений
‘u’ — включить / выключить искажение
Калибровка прошла успешно. средняя ошибка перепроецирования = 0,49

0