【发布时间】:2018-06-10 15:48:38
【问题描述】:
我有一个奇怪的问题。 我正在通过网络摄像头和 OpenCV 拍摄一组连续事件的照片。将它们存储在向量变量中。在捕获功能结束时,我得到的只是最后一次捕获。
我认为我对向量有一个基本问题。功能如下
void eventCapture()
{
vector<cv::Mat> capturedAll;
getCaptures(capturedAll, 10, 500);
int csize = capturedAll.size();
// Here gives always the last capture
// It is not related with imshow
// imwrite also saves the last capture as wrong
for (int i = 0; i < 10; i++) {
cv::imshow("Images", capturedAll[i]);
string imgname = "imgcaps" + to_string(i) + ".jpg";
cv::imwrite(imgname, capturedAll[i]);
cv::waitKey(100);
}
}
void getCaptures(vector<cv::Mat>& capStore, int count, int tdif)
{
QElapsedTimer capTimer;
capTimer.start();
for (int i = 0; i < count; i++) {
capTimer.restart();
// get_capture takes a photo from webcam
cv::Mat capMat = webCam.get_capture();
capStore.push_back(capMat);
string imgname = "localsave" + to_string(i) + ".jpg";
// Saved image here is giving correct result
cv::imwrite(imgname, capMat);
while (!capTimer.hasExpired(tdif))
qApp->processEvents();
}
}
我也尝试使用迭代器,但它给出了同样的错误结果。
【问题讨论】:
-
显示get_capture()的代码。
-
我所能做的就是猜测,但我认为你应该在 while 循环中否定 hasExpired,因为目前你得到 10 微秒的图像。难怪他们看起来一样......
-
get_capture 是一个伪代码。我有一个不同的相机类,但该功能的输出是正确的。正如我在 getCaptures 函数中所指出的,如果我直接保存捕获的图像,我会得到正确的结果。但如果我将它分配给一个向量并尝试从那里获取,我将获得最后一次捕获。
-
它们实际上不是几微秒。我可以以毫秒为单位设置捕获之间的时间差。所以 500 毫秒是非常长的时间差,我确信相机前的场景在两次捕捉之间会发生变化。
-
我这里复制错了,对不起。这只是捕获之间的延迟。