【发布时间】:2021-03-28 15:55:29
【问题描述】:
我需要当前帧和前一帧在 OpenCV C++ 中进行一些计算。
到目前为止,这是我的代码:
vector <cv::Mat> frames;
// Current frame
Mat M = current_frame;
Mat F; // previous frame
// set Previous Frame
if (frames.empty()) {
F = M;
frames.push_back(M);
cout << "empty" << endl;
}
else {
F = frames.back();
frames.push_back(M);
cout << " NOTempty" << endl;
}
// print frame Mat means to see if things look okay
cout << mean(M) << endl;
cout << mean(F) << endl;
这个想法是M 是当前帧,F 是前一帧。帧存储在frames,一个矩阵向量。如果frames 为空,则让F = M 因为没有前一帧。然后,将M 添加到frames。如果frames 不为空,则M 是当前帧,F 是向量frames 中的最后一个Mat。提取F后,将当前帧M添加到frames的末尾。
我正在打印出M 和F 的平均值,以便在终端正常工作时我可以在终端中获得一些易于阅读的参考。不幸的是,它看起来不对。
这是打印出来的:
empty
[5.09352, 6.60551, 8.54364, 0]
[5.09352, 6.60551, 8.54364, 0]
NOTempty
[5.02325, 6.46646, 8.39534, 0]
[92.0037, 97.9186, 106.677, 0]
NOTempty
[4.94272, 6.38162, 8.32141, 0]
[91.7741, 97.7845, 106.555, 0]
应该是这样的:
empty
[5.09352, 6.60551, 8.54364, 0]
[5.09352, 6.60551, 8.54364, 0]
NOTempty
[5.02325, 6.46646, 8.39534, 0]
[5.09352, 6.60551, 8.54364, 0]
NOTempty
[4.94272, 6.38162, 8.32141, 0]
[5.02325, 6.46646, 8.39534, 0]
这应该很简单,我做错了什么?
【问题讨论】:
-
为什么还要使用向量。您只需要两个变量,用于上一帧和当前帧。每当出现新框架时,分配
previous_frame = current_frame; current_frame = new_frame;并检查if (previous_frame.empty() || current_frame.empty()) continue;或其他内容
标签: c++ opencv matrix vector computer-vision