我使用相机继续获取帧。在我的代码中,我使用VideoCapture来做到这一点。但是当我调试时,我发现我得到的帧是旧帧。我问了一些人,他们告诉我,一些旧的框架将存储在缓冲区中,我应该使用工作线程来获取最新的框架。此处也有类似的问题。
在这里,我有两个问题,
如果缓冲区可以存储5帧并且现在已经存储了5帧,那么缓冲区何时更新?已经取出5帧或只有1帧?因为我想知道我是否一直都有旧框架,或者我有一个新框架然后四个旧框架然后改为一个最新框架......
我已调试我的代码,在cap>>处设置断点帧。第一帧(循环)把我的手放进去,第二个循环把我的手伸出相机,我发现图像会在几帧后改变。这是否意味着我有一个新的帧然后四个旧帧然后改为一个最新的帧...?
2.因为这是我第一次使用线程,我不确定我的代码是否错误,这是我的代码,
void task(VideoCapture cap, Mat& frame) {
while (true) {
cap.grab();
}
}
int main() {
Mat frame, image;
VideoCapture cap;
cap.open(0);
cap.set(CV_CAP_PROP_FRAME_WIDTH, 1600);
cap.set(CV_CAP_PROP_FRAME_HEIGHT, 1080);
cap.grab();
thread t(task, cap, frame);
while (true) {
cap.retrieve(frame);
frame.copyTo(image);
...//image processing loop
}
}
我还在task()中设置断点来检查帧,但条件相同。几帧之后图像会发生变化。我不知道为什么。我的代码是错误的还是我不能设置断点来检查这样使用线程?有人可以帮忙吗?非常感谢你。