Создание видео из изображений с OpenCV 2.4.1 в Ubuntu

Вот мой пример программы для создания видео из изображений с OpenCV. Но мое выходное видео не работает, и произошла ошибка, сообщающая, что «Не удалось демультиплексировать поток» Пожалуйста помоги.

  #include<cv.h>
  #include<highgui.h>
  #include<cvaux.h>
  #include<cxcore.h>

  int main()
{
    //CvVideoWriter *writer = 0;
    int isColor = 1;
    int fps     = 25;  // or 30
    int frameW  = 320; // 744 for firewire cameras
    int frameH  = 240; // 480 for firewire cameras
    CvSize size;

    size.width = frameW;
    size.height = frameH;
    CvVideoWriter *writer = cvCreateVideoWriter(
            "data3.avi",
            CV_FOURCC('M','J','P','G'),
            fps,
            size);
    IplImage* img = 0; 
    img=cvLoadImage("IMG_0157.JPG");
    for(int counter=0;counter < 3000;counter++)
    {
    cvWriteFrame(writer,img);      // add the frame to the file
    }
    cvReleaseVideoWriter(&writer);
    return 0;
}
 eboix21 июн. 2012 г., 11:14
Это кажется очень общей ошибкой в Ubuntu. Я не думаю, что это специфично дляopencv, Например:ubuntuforums.org/archive/index.php/t-763441.html

Ответы на вопрос(3)

поддерживаются OpenCV, некоторые - мультимедийными приложениями. Наличие одного, который работает как с OpenCV, так и с вашим любимым видеоплеером, является методом проб и ошибок.

Что вы можете попробовать: Используйте VLC (если вы его уже не используете). Это один из самых сильных игроков.

Если все, что вы хотите сделать, это отобразить / обработать последовательность изображений в OpenCV как видео, вы можете использовать недокументированную функцию VideoCapture: загрузить последовательность изображений.

Пример написан на C ++, но вы можете легко преобразовать его в C.

// pics are a sequence of Pictures001.jpg, PicturesS002.jpg, etc
cv::VideoCapture cap("path/to/my/Pictures%03d.jpg");

cv::Mat frame;

for(;;)
{
    cap >> frame;
    if(frame.empty())
       break;

    // do some processing
}
 22 мая 2013 г., 22:13
Это довольно приятная функция VideoCapture. И очень плохо, что документ OpenCV так плохо.
 Still Learning Boy22 июн. 2012 г., 06:37
Спасибо Василе. Я установил больше кодеков. Теперь это работает.
 22 июн. 2012 г., 07:13
Не нужно за спасибо. Upvote и / или принять ответ. Это то, как вы говорите спасибо на стеке потока.
 Still Learning Boy21 июн. 2012 г., 11:26
Привет, я пробовал много кодеков, таких как DIVX, PIM1, MJPG, DIB, CV_FOURCC_PROMPT, а также проигрыватель VLC. Но никто не работает. Что вы подразумеваете под "cap & gt; & gt; кадр; & Quot; в цикле? Моя цель - использовать несколько сохраненных изображений для создания видео.
 21 июн. 2012 г., 12:46
В этом примере показано, как читать, а не писать изображения, на случай, если вы планируете сделать видео для воспроизведения с помощью opencv. Но еще одно решение вашей проблемы - установить еще несколько кодеков. Если вы работаете в Windows, попробуйте пакет кодеков K-Lite. Это шанс, что видео будет играть тогда

но вы пытаетесь загрузить одно изображение?

IplImage* img = 0; img=cvLoadImage("IMG_0157.JPG");

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

IplImage *img = cvLoadImage("<folder>\\<image_name>.jpg");

size.width = img->width;
size.height = img->height;

Затем создал программу записи видео и проверил, существует ли она:

CvVideoWriter *writer = cvCreateVideoWriter(
    "<video_name>.avi",
    -1,//CV_FOURCC('I','Y','U','V'), // VIDEO CODEC
    fps,
    size);

if(writer == NULL)
    std::cout << "No videowrite here!" << '\nl';

И для каждого найденного изображения записывают кадр видео и затем выпускают его.

while(img!=NULL)
{
    sprintf( filename, "<folder>\\<image_name>_%d.jpg", i );

    img = cvLoadImage(filename); //imagem b&w
    cvWriteFrame(writer,img);

    i++;
}

cvReleaseVideoWriter(&writer);
cvReleaseImage(&img);

И это сработало!

Не забудьте инициализировать переменныеfilename а такжеint i.

Надеюсь, это помогло!

что размер img и размер, используемый для открытия VideoWriter, различаются.

Таким образом, вы должны быть уверены, что изображения IPLImages или Mat, а также VideoWriter имеют одинаковый размер, иначе вывод видео будет неправильным.

 10 июн. 2015 г., 01:56
Это очень помогло ...

Ваш ответ на вопрос