VideoCapture :: read()如何修改在帧处理循环内外声明的图像?

时间:2017-06-09 18:10:27

标签: c++ opencv video-capture mat

我正在从相机中捕捉视频帧。意图是当用户按下“A' A”时将当前帧Mat frame保存到Mat A。并在用户按下' B'时将其保存到Mat B。问题是最终我得到了所有3个矩阵ABframe中的最后一帧。

在第二个代码片段中,我发现如果我将Mat frame置于帧处理循环中,我会得到我想要的但我不明白为什么?有人可以解释一下吗?

VideoCapture cap(0);
Mat A,B,frame;
while(true) {
    if (!cap.read(frame)) break;
    imshow("frame",frame);
    char ch = waitKey(33);
    if (ch == 'A') A = frame;
    if (ch == 'B') B = frame;
    if (ch == 27) {
        break;
    }
}

imshow("frame",frame);
imshow("A",A);
imshow("B",B);
waitKey(0);

正确使用代码:

VideoCapture cap(0);
Mat A,B,X;
while(true) {
    Mat frame;
    if (!cap.read(frame)) break;
    imshow("frame",frame);
    char ch = waitKey(33);
    if (ch == 'A') A = frame;
    if (ch == 'B') B = frame;
    if (ch == 27) {
        X = frame; // just last frame
        break;
    }
}

imshow("frame",X); 
imshow("A",A);
imshow("B",B);
waitKey(0);

0 个答案:

没有答案