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处的异常..
我想在录制的视频中应用相同的内容
答案 0 :(得分:0)
我认为问题出在previos_frame
上。只在循环和循环处为previous_frame
赋值。
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);
}