2010-01-01 7 views
1

AVI 비디오 파일과 웹캠이 있습니다. cvQueryFrame은 두 경우 모두 null을 반환합니다. 코드가 적용됩니다 (캠만 해당) :왜 OpenCV의`cvCreateCameraCapture`와`cvCreateFileCapture`가 작동하지 않습니까?

#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"); 
} 
+0

그냥 직감 : 카메라에 대한 인덱스 0을 사용해보십시오. 또한 카메라가 제대로 설치되었는지 확인하십시오 (응용 프로그램에서 사용할 수 있습니까?). 그리고 현재 다른 응용 프로그램이 카메라를 사용하고 있지 않습니다. – James

+0

해결책을 이미 찾았습니다. 첫 번째 프레임이 표시되지 않으므로 'if (! frame) break;'가 시작되기 전에 동영상보기가 종료됩니다. 그러나 문제는 여전히 파일에서 비디오를 검색하는 데 적절합니다. – Ivan

답변

0

비디오 형식을 확인하십시오. OpenCV는 지원하는 코덱이 까다 롭습니다. 예를 들어, Xvid에서는 작동하지 않습니다.

opencv_ffmpeg200d.dll 

: 당신은 내가 fmpeg DLL을 런타임에 현재 작업 디렉토리에 존재 확인하기 위해 필요하다고, 내가 OpenCV의 코드로 스테핑에 의해 발견 된 OpenCV wiki

3

에서 지원되는 코덱의 목록을 찾을 수 있습니다 이 dll이 없으면 OpenCV는 경고를 표시하지 않고 캡처 작성 호출은 NULL 만 반환합니다.

HTH

+0

+1 이것이 제 경우의 원인이었습니다 – INS

+0

프리 컴파일 된 OpenCV2.4.2를 다운로드했으며이 디버그 파일은 포함되어 있지 않습니다. opencv_ffmpef242.dll이옵니다. 문제는 내가 하드 드라이브에 여유 공간이 없기 때문에 (아직) 내 라이브러리를 만들 수 없다는 것입니다 ... –