我想從文件中打開一個視頻(.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。
有人可以幫我理解這些代碼有什麼問題,我該如何解決它們?謝謝!!
在哪個平臺上運行代碼? Windows還是Linux?你使用的是什麼opencv版本? – 2vision2