Почему `cvCreateCameraCapture` и `cvCreateFileCapture` OpenCV не работают?

Имейте видеофайл AVI и веб-камеру. cvQueryFrame возвращает null в обоих случаях. Применяется код (только для камеры):

#include "highgui.h"
#include <iostream>

using namespace std;

int main( int argc, char** argv )
{   
    cvNamedWindow( "KillCam", CV_WINDOW_AUTOSIZE );
    cvWaitKey(0);
    CvCapture* capture = cvCreateCameraCapture(-1);
    assert(capture != NULL);
    IplImage* frame;

    while(1){
        frame = cvQueryFrame( capture ); 
        if( !frame ) break;
        cvShowImage( "KillCam", frame );
        char c = cvWaitKey(33);
        if( c == 30 ) break;
    }
    cvReleaseCapture( &capture );
    cvDestroyWindow( "KillCam" );
}

person Ivan    schedule 01.01.2010    source источник
comment
Просто догадка: попробуйте использовать индекс 0 для камеры. Также убедитесь, что ваша камера правильно установлена ​​(можете ли вы использовать ее из приложений?) и что никакое другое приложение в настоящее время не использует камеру.   -  person James    schedule 02.01.2010
comment
Уже нашел решение. Кажется, что первые кадры не отображаются, поэтому if( !frame ) break; прекращает просмотр видео до его начала. Но проблема по-прежнему актуальна для извлечения видео из файла.   -  person Ivan    schedule 19.10.2015


Ответы (2)


Я обнаружил, войдя в код openCV, что мне нужно убедиться, что fmpeg dll присутствует в текущем рабочем каталоге во время выполнения:

opencv_ffmpeg200d.dll

OpenCV не выдает никаких предупреждений, если эта dll не найдена, вместо этого вызов создания захвата просто возвращает NULL.

чт

Si

person sipickles    schedule 11.02.2010
comment
Я загрузил предварительно скомпилированный OpenCV2.4.2, и этот файл отладки не включен. Приходит opencv_ffmpef242.dll. Дело в том, что я не могу собрать свои библиотеки (пока), так как у меня нет свободного места на жестком диске... - person Jav_Rock; 11.09.2012

Проверьте формат видео. OpenCV может быть разборчив в том, какие кодеки он поддерживает; например, он не работает с Xvid. Список поддерживаемых кодеков можно найти на вики OpenCV.

person Mike O'Malley    schedule 10.01.2010