0

ファイルからビデオ (.avi) を開き、フレームごとに読み取り、ウィンドウに表示しようとしています。ここでスタック オーバーフローを調べたところ、興味深いコードがいくつか見つかりましたが、それらのすべてが私のプログラムを爆破し続けており、その理由がわかりません。私はこのコードを使用しました:

 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 ループ条件は、FaceDetection.exe の 0x0000000066E538C6 (opencv_ffmpeg245_64.dll) で未処理の例外をスローします: 0xC0000005: アクセス違反の読み取り場所 0x0000000002EF1000。

私も同じプログラムを試しましたが、このループで:

while( cvGrabFrame( capture ) ) {

        if( !currFrame )

            break;

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

    }

この 2 番目の while ループ条件は、「currFrame = cvRetrieveFrame( capture );」で同じ例外をスローします。: FaceDetection.exe の 0x0000000066E538C6 (opencv_ffmpeg245_64.dll) で未処理の例外: 0xC0000005: アクセス違反の読み取り場所 0x0000000003011000.

これらのコードの何が問題なのか、どのように修正すればよいのかを理解するのを手伝ってもらえますか? ありがとう!!

4

1 に答える 1