从相机中找到帧的差异时出错

时间:2013-05-21 16:05:48

标签: c++ visual-c++ opencv image-processing computer-vision

int main(int argc, char* argv[])
{
    VideoCapture cap(0);
    Mat current_frame;
    Mat previous_frame;
    Mat result; 
    Mat frame;

    //cap.open(-1);
    if (!cap.isOpened()) {
        //cerr << "can not open camera or video file" << endl;
        return -1;
    }

    while(1)
    {
        cap >> current_frame;
        if (current_frame.empty())
            break;

        if (! previous_frame.empty())  {
            // subtract frames
            subtract(current_frame, previous_frame, result);
        }


        imshow("Window", result);
        waitKey(10);

        frame.copyTo(previous_frame); 
    }
}

当我运行此程序从前一帧中减去当前帧然后显示结果帧时,它会在开始执行时显示此错误

  

WK01.exe中0x755d812f处的未处理异常:Microsoft C ++异常:cv ::内存位置0x001fe848处的异常..

我想在录制的视频中应用相同的内容

2 个答案:

答案 0 :(得分:0)

我认为问题出在previos_frame上。只在循环和循环处为previous_frame赋值。

,我认为在while循环开始时它可能是空的
if (! previous_frame.empty())  {
        // subtract frames
        subtract(current_frame, previous_frame, result);
    }

块将不会执行。

previous_frame在减去时也必须与current_frame的大小相同。

此代码(减法方法)应确定result的大小,您希望在以下行显示。

答案 1 :(得分:0)

在第1帧中,结果为空!

imshow("Window", result); // this will crash

另外,您要将空frame Mat复制到previous_frame,而应该是current_frame,不是吗?

尝试:

   if (! previous_frame.empty())  {
       // subtract frames
       subtract(current_frame, previous_frame, result);
       imshow("Window", result); 
   }
   waitKey(10);
   current_frame.copyTo(previous_frame); 
}