2012-03-18 3 views
-5

비디오를 재생하고 싶습니다.opencv library 비디오 재생

opencv를 사용하여 어떻게 할 수 있습니까?

+1

지금까지 작성한 코드를 붙이면 해결할 수 있습니다. – karlphillip

+0

그런데 OpenCV 네이티브 윈도우에 아무것도 표시하고 싶지 않으면'cvNamedWindow()','cvShowImage()'및'cvDestroyWindow()'에 대한 모든 호출을 제거해야합니다. – karlphillip

답변

2

나는 카메라에서 프레임을 검색하고 QLabel 내부를 표시하는 방법을 보여줍니다 최소한의 예를 구축하는 our previous conversation의 코드를 사용하고 있습니다.

cvCreateCameraCapture()에 전달 된 값이 시스템에서 변경 될 수 있습니다. 내 리눅스에서 0은 매직 넘버이다. Windows 및 Mac에서는 -1을 사용합니다. 단순 목적

, 난 그냥 main() 기능의 몸을 공유 해요 :

int main(int argc, char** argv) 
{ 
    QApplication app(argc, argv); 

    CvCapture* capture = cvCreateCameraCapture(0); // try -1 or values > 0 if your camera doesn't work 
    if (!capture) 
    { 
     std::cout << "Failed to create capture"; 
     return -1; 
    } 

    IplImage* frame = NULL; 
    QLabel label; 
    while (1) 
    { 
     frame = cvQueryFrame(capture); 
     if(!frame) break; 

     QImage qt_img = IplImage2QImage(frame); 
     label.setPixmap(QPixmap::fromImage(qt_img)); 
     label.show(); 

     // calling cvWaitKey() is essencial to create some delay between grabbing frames 
     cvWaitKey(10); // wait 10ms 
    } 

    return app.exec(); 
} 

편집 :

동일 카메라에서 비디오 파일 또는 동영상을 재생할 수있는 방법 . 실제로 변경되는 유일한 사항은 cvCreateFileCapture()의 경우 cvCreateCameraCapture()입니다.

cvCreateFileCapture()NULL을 반환하면 비디오 파일을 열 수 없다는 의미입니다. 이 문제는 두 가지 이유로 발생할 수 있습니다. 동영상을 처리 할 코덱이 없거나 파일을 찾을 수 없습니다. 그들은 하나의 슬래시를 사용

capture = cvCreateFileCapture("C:\path\video.avi"); 

, 그들은 두 번 사용한다 : 파일을로드 할 때

는 많은 사람들이 Windows에서 folowwing의 실수를

capture = cvCreateFileCapture("C:\\path\\video.avi"); 

뭔가가 실패 할 경우

, 은 전화의 반송을 항상 확인해야합니다. :