0

我在面向对象的方法中使用 OpenCV 在 C++ 中编程。基本上我有一个名为 People[8] 的对象数组。对于每个数组,我想通过使用网络摄像头拍照来为其分配一个图像。我做了这样的事情:

for (int i=0; i<8; i++){
    cvWaitKey(0);                         //wait for input then take picture
    Mat grabbed = cam1.CamCapture();
    People[i].setImage(grabbed);
    imshow("picture", grabbed);
    cvWaitKey(1);
}

我在这里面临两个问题:1)imshow 不显示捕获的“最新”图像,它显示以前拍摄的图像,即(i-1)而不是 i。2)当我将所有图像一起显示时,会出现8个窗口,它们都在显示相机上拍摄的最后一张图像。

我不知道出了什么问题,有人可以请教吗?先感谢您。

4

2 回答 2

0

我有一段时间没有使用 OpenCV,但我会在 cvWaitKey(1) 周围移动,我也不会有 2 次调用它,据我记得它类似于 glFlush()。此外,我会将 1 更改为 10。出于某种原因,我记得 1 不起作用。

于 2013-04-21T00:57:32.847 回答
0

“他们都在显示相机上拍摄的最后一张图像。”

您从捕获点获得的图像到驱动程序内存。所以前一个图像被后者覆盖。

您需要存储您获得的垫子的 clone(),例如:

People[i].setImage( grabbed.clone() );
于 2013-04-21T08:37:26.143 回答