0
int main(int argc, char* argv[]) {
ofstream file;
file.open("Motion.dat");
int frame_number = 0;
CvCapture* capture = cvCreateFileCapture("Cricketc1.avi");
CvCapture* capture1 = cvCreateFileCapture("Cricketc1.avi");

IplImage* imgsize  = NULL;
IplImage *img1     = NULL;
IplImage *img2     = NULL;
IplImage *vidFrame = NULL;
IplImage *imggray1 = NULL;
IplImage *imggray2 = NULL;
IplImage *imggray3 = NULL;

cvNamedWindow("Video", 0);
cvNamedWindow("Video1", 0);
imgsize = cvQueryFrame(capture1);
assert(imgsize);
CvSize sz = cvGetSize(imgsize);
cvReleaseCapture(&capture1);
imggray1 = cvCreateImage(sz, IPL_DEPTH_8U, 1);
imggray2 = cvCreateImage(sz, IPL_DEPTH_8U, 1);
imggray3 = cvCreateImage(sz, IPL_DEPTH_8U, 1);

while (true) {
    frame_number++;
    img1 = cvQueryFrame(capture);
    if(img1->imageData == NULL)
        break;
    cvCvtColor(img1, imggray1, CV_RGB2GRAY);

    img2 = cvQueryFrame(capture);
    if(img2->imageData == NULL)
        break;
    cvCvtColor(img1, imggray1, CV_RGB2GRAY);

            cvAbsDiff( imggray1, imggray2, imggray3 );
            CvScalar sumDiff = cvSum (imggray3);
    cout << sunDiff.val[0] << sunDiff.val[1] << sunDiff.val[2] << endl;
    cvWaitKey(40);
}
cvReleaseCapture(&capture);
cvDestroyAllWindows();
file.close();
system("Pause");
return 0;
}

ビデオ @ 25 fps には合計 1251 フレームがあります。

しかし、ループはframe_number625 の行で中断しif(img2->imageData == NULL)ます。

このエラーは主に、while ループの間に計算を行うと発生します。単純な cvShowImage() は問題なく動作しますが、それ以外の操作を行うとこのエラーが表示されます。

これはその後に出てくるエラーです: Unhandled exception at 0x00221de7 in getMotion2.exe: 0xC0000005: Access violation reading location 0x00000044.

何が問題ですか ?

4

1 に答える 1

0

ループ内の同じ cvCapture* から 2 回画像を読み取っています: img1 = cvQueryFrame(capture);and img2 = cvQueryFrame(capture);. 2 行目を に変更すると、正常にimg2 = cvQueryFrame(capture2);動作するはずです。

于 2012-12-26T22:29:57.117 に答える