openCV cvCreateVideoWriter всегда возвращает ноль - PullRequest
1 голос
/ 24 мая 2009

Я пытаюсь сохранить видеофайл с openCV под Mandriva Linux 2009.1. К сожалению, cvCreateVideoWriter всегда возвращает ноль, хотя я мог видеть и изменять оба поля и mpeg, другими словами cvCaptureFromCam, cvCaptureFromAvi, cvRetrieveFrame работает.

Я испробовал все возможные кодеки из этого учебника и этого кодека страницы . Я также пробовал 0 для несжатого avi и -1 для поля выбора в параметре fourcc, но выбор не появился и ничего не произошло. Я также изменил isColor до 0.

У меня также есть права на запись в рабочий каталог.

Вот соответствующий фрагмент кода:

    CvVideoWriter *writer = 0;
    int isColor = 1;
    int fps = 25;
    int frameW = 640;
    int frameH = 480;


    if( argc == 1 || (argc == 2 && strlen(argv[1]) == 1 && isdigit(argv[1][0])))
        capture = cvCaptureFromCAM( argc == 2 ? argv[1][0] - '0' : 0 );
    else if( argc == 2 ) {
        printf("argc == 2 :%s:\n", argv[1] );
        capture = cvCaptureFromFile( argv[1] );
    }

    cvInitSystem(argc,argv);

 writer = cvCreateVideoWriter("out.avi",CV_FOURCC('I','Y','U','V'),fps,cvSize(frameW,frameH),isColor);

В чем может быть проблема?

Ответы [ 2 ]

1 голос
/ 29 июня 2012

Я прочитал ваше сообщение, ответ Ланса и ваши комментарии к нему, затем, наконец, нашел обходной путь для себя и решил добавить несколько заметок для всех, кто борется с этой проблемой.

Первое, что нужно проверить - построил ли CMake OpenCV с FFmpeg. Мой быстрый и ужасный способ сделать это - просто запустить cmake с флагами и параметрами, как вы написали их во время установки, снова. В конце вывода будут журналы о том, какие компоненты будут установлены. Если ваши параметры копируют те, которые использовались во время фактической установки, вы получите информацию о том, что уже установлено.

Далее вы можете проверить доступные кодеры и декодеры для кодеков в вашей системе Linux. Я делаю это с помощью ffmpeg -codecs.

Третье замечание - это надежные и примитивные аргументы, установленные для cvCreateVideoWriter:

"a0000.png", 0, кадр / с, размер, 0

fps и size - это переменные, содержащие ваши значения для полей fps и frame_size соответственно. Вы получите пакеты с изображениями - то, что Ланс Ричардсон и Рикс уже отметили.

Наконец, для моей системы, в которой OpenCV построен с FFmpeg и установлен кодировщик XVID, я включаю эти аргументы в cvCreateVideoWriter:

"/ home / me / openCVOut / a.avi", CV_FOURCC ('X', 'V', 'I', 'D'), кадр / с, размер

и, наконец, получить то, что я хочу.

Надеюсь, мой ответ пригодится!

1 голос
/ 24 мая 2009

Это будет зависеть от того, как была настроена ваша библиотека OpenCV. В частности, я считаю, что HAVE_FFMPEG должно быть определено для обработки значения FOURCC 'IYUV'. Была ли ваша библиотека построена с определением HAVE_FFMPEG?

Объект записи по умолчанию (который создается, когда fourcc равен нулю, или значение fourcc не обрабатывается одним из доступных обработчиков) создает файл изображения для каждого кадра. В этом случае имя файла должно быть чем-то вроде «file% 04d.foo» или «file0001.foo», в противном случае создание средства записи завершится неудачно. Вы можете попробовать передать что-то вроде «test0001.png» для параметра имени файла в качестве эксперимента, чтобы убедиться, что средство записи изображений по умолчанию создано успешно (это не поможет напрямую, но может быть способом подтвердить, что значение fourcc не признан доступным писателем.)

Согласно документации, опция открытия диалогового окна выбора, когда fourcc равен -1, зависит от Windows.

...