Почему этот код не записывает какие-либо данные в выходной файл для создания фильма с использованием opencv

Я пытаюсь создать видео из набора больших необработанных изображений, которые у меня есть.

Код выглядит следующим образом:

int imageWidth=687;
int imageHeight=916;
int fps=3;
int ex=-1;
CvSize size = cvSize(imageWidth,imageHeight);
VideoWriter outputVideo;
outputVideo.open(MovieOutput, ex, fps, size, true);
if(outputVideo.isOpened())
{
cout << "error opening output video";
}
for(int frameNo=0;frameNo<58;frameNo++)
{
ostringstream outfilename;
outfilename << InputDir<< (frameNo+1)<<".jpg";
rawimages.Read(frameNo);
Mat image=rawimages.ToOpencvImage();
imwrite( outfilename.str(), image );
outputVideo <<image;
imshow("Image", image);
if(waitKey(30) >= 0) break;
}

Я вижу, что изображения отображаются на экране, а также различные jpg сохраняются на жестком диске.

Я вижу, что выход AVI создан, но его размер равен нулю.

В чем проблема с этим кодом?

некоторые заметки:

Размер вывода очень большой. Может ли он генерировать фильм с таким размером?

1

Решение

Чтобы суммировать комментарии: вы передаете второй параметр в команду открытия VideoWriter со значением -1. Предполагается, что это откроет диалог выбора кодека в Windows, но в OpenCV 2.4.5 диалог кажется ошибочным — кажется, но я не смог записать файл позже.

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

outputVideo.open("example.avi", CV_FOURCC('M','J','P','G'), fps, size, true);
0

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

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