OpenCV отображает AVI-файл, закодированный в I420

Я пытаюсь написать приложение для обработки видео с использованием OpenCV 2.4.2 (в Visual C ++ 2010 Express в Windows 7), но у меня возникают проблемы с отображением определенных файлов AVI. Большинство отображается правильно, но когда я использую AVI-файл, закодированный в формате I420, все, что я получаю, — это полосатое розовое изображение для каждого кадра (оно корректно отображается в обычных медиапроигрывателях).

Выводится вывод: http://i.imgur.com/BOu6c.png?1

В настоящее время я использую C ++ API, но то же самое происходит, когда я использую C API (код с этой страницы: http://nashruddin.com/how_to_play_avi_files_with_opencv). Я нахожу это странным, потому что в большинстве ответов на этом сайте и ресурсах в Интернете они явно рекомендуют использовать кодировку I420. Кто-нибудь знает, что может быть причиной этого или как это исправить?

Вот урезанная версия кода, который я использую:

int main(int argc, char** argv){
string fname = "test.avi";
VideoCapture capture(fname);
if(!capture.isOpened()){
cerr << "error opening " << fname << endl;
return -1;
}

Mat frame;
namedWindow("output");
double rate = capture.get(CV_CAP_PROP_FPS);
int delay = 1000/rate;
while(true){
if(!capture.read(frame)) break;
cv::imshow("output", frame);
if(waitKey(delay) >= 0) break;
}
capture.release();

return 0;
}

Я использую предварительно скомпилированную версию OpenCV, если это имеет значение (http://sourceforge.net/projects/opencvlibrary/).

2

Решение

Итак, мне удалось протестировать еще несколько компьютеров. Один просто разбился, а на другом видео воспроизводилось нормально. Оказалось, что это была проблема с включенным FFMPEG в компиляции OpenCV по умолчанию, которая имела проблемы с несжатым AVI. Перекомпилируйте OpenCV с отключенным FFMPEG или просто используйте другой кодек для сжатия видео.

0

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

Других решений пока нет …