0
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++ 异常:内存位置 0x001fe848 处的 cv::Exception..

我想在录制的视频上应用同样的东西

4

2 回答 2

0

我认为问题出在previos_frame. 您previous_frame仅在循环的 and 处分配值。我认为在 while 循环开始时它可能是空的,所以

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

块不会被执行。

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

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

于 2013-05-21T16:37:01.620 回答
0

在第一帧,结果为空!

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

另外,您正在将空frameMat 复制到 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); 
}
于 2013-05-21T18:31:26.940 回答