2013-06-21 34 views
0

我想從文件中打開一個視頻(.avi),逐幀閱讀並在窗口中顯示它們。我在堆棧溢出中看過這裏,發現了一些有趣的代碼,但是他們中的每一個都不停地炸燬我的程序,我不知道爲什麼。我用這個代碼:顯示來自opencv中的文件的視頻

int main(int argc, const char** argv) { 

    CvCapture* capture = 0; 
    string inputName = "C:\\Users\\Cristina\\Videos\\Capture_me.avi"; 

    capture = cvCaptureFromAVI(inputName.c_str()); 

    if(!capture) { 

     cout << "Capture from AVI didn't work" << endl; 

    } else { 

     cvNamedWindow("result", CV_WINDOW_AUTOSIZE); 
     cout << "In capture ..." << endl; 

     IplImage* currFrame = cvQueryFrame(capture); 
     IplImage* prevFrame = cvCloneImage(currFrame); 

    while(currFrame = cvQueryFrame(capture)) { 

      if(!currFrame) 

      break; 

      cvShowImage("result", currFrame); 
      cvCopy(currFrame , prevFrame); 

    } 

     waitKey(0); 

     cvReleaseCapture(&capture); 
     cvReleaseImage(&currFrame); 
     cvDestroyWindow("result"); 

    } 

    return 0; 
} 

while循環條件拋出:未處理的異常在0x0000000066E538C6(opencv_ffmpeg245_64.dll)在FaceDetection.exe:0000005:訪問衝突讀取位置0x0000000002EF1000。

我也嘗試相同的程序,但用這個循環:

while(cvGrabFrame(capture)) { 

     if(!currFrame) 

      break; 

     cvShowImage("result", currFrame); 
     cvCopy(currFrame, prevFrame); 
     currFrame = cvRetrieveFrame(capture); 

    } 

該第二while循環的條件拋出在相同的異常「currFrame = cvRetrieveFrame(捕捉);」 :FaceDetection.exe中0x0000000066E538C6(opencv_ffmpeg245_64.dll)未處理的異常:0xC0000005:訪問衝突讀取位置0x0000000003011000。

有人可以幫我理解這些代碼有什麼問題,我該如何解決它們?謝謝!!

+0

在哪個平臺上運行代碼? Windows還是Linux?你使用的是什麼opencv版本? – 2vision2

回答

0

我認爲這是一個類似的問題Unhandled exception at 0x10012c5d (highgui110.dll)。主要的一點是你可能會使用OpenCV的不穩定版本,這可能會導致鏈接問題。嘗試恢復到之前版本的OpenCV並查看它是否有效。希望能幫助到你!