2013-08-08 2 views
1

누군가 OpenCV가 C++ API를 사용하여 .avi 파일을 열지 못하는 이유를 설명해 줄 수 있습니까? 대신 C API로 열립니다.OpenCV : C++ API에서 .avi 파일이 열리지 않고 C 언어로 열림

C++ :

Mat source; 
VideoCapture stream("Video.avi"); 

if (!stream.isOpened()){ 
    std::cout << "Stream cannot be opened" << std::endl; 
    return -1; 
} 
while(1) 

    if(!stream.read(source)) { 
     std::cout << "Error reading video frame" << endl; 
    } 

imshow("Source", source); 

이것은 Video.avi를 엽니 다 실패하고 "오류 읽기 비디오 프레임"시간이 지나면 시간을 인쇄 여기

두 코드 조각입니다. ffmpeg.dll이 경로에 있으며 ffdshow도 설치했습니다.

C :

CvCapture* stream = cvCreateFileCapture("Video.avi"); 
IplImage* source; 
while(1) { 
    source = cvQueryFrame(stream); 
    if(!source) printf("\n Problem"); 
    Mat src(source); 
    imshow("source", src); 
    if(waitKey(1) >= 0) break; 
} 

이 문제없이 Video.avi를 엽니 다.

도움 주셔서 감사합니다.

추신. 아마 Video.avi 자체가 OpenCV를 사용하여 만들어 졌음을 언급 할 가치가 있습니다.

답변

0

C 및 C++ 코드가 동일하지 않습니다. 이 코드는 작동합니다 :

int main(int argc, char** argv) 
{ 
    Mat source; 
    VideoCapture stream("video.avi"); 

    if (!stream.isOpened()) 
    { 
     std::cout << "Stream cannot be opened" << std::endl; 
     return -1; 
    } 

    while(1) 
    { 
     stream >> source; 
     if(source.empty()) 
     { 
      std::cout << "Error reading video frame" << endl; 
     } 
     imshow("Source", source); 
     waitKey(20); 
    } 
    stream.release(); 
    getchar(); 
} 
+0

효과가 있습니다. 감사 ! 내 초기 스 니펫이 작동하지 않는 이유를 설명해 주시겠습니까? – Nfys

+0

1) 루프 브래킷을 놓친 동안 부재중입니다. 2) 이미지 표시를 위해 imshow waitKey가 필요합니다. –