我正在使用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个窗口,所有窗口都显示在相机上捕获的最后一个图像。
我没有任何线索有什么不妥,有人可以请教吗?先感谢您。
答案 0 :(得分:0)
我有一段时间没有使用过OpenCV,但是我会绕着cvWaitKey(1)移动,我也不会有2次调用,因为我记得它类似于glFlush()。我也会改1到10.出于某种原因,我记得1不工作。
答案 1 :(得分:0)
“所有这些都显示在相机上捕获的最后一张图像。”
从捕获点到驱动程序内存的图像。所以前一个图像被后者覆盖。
你需要存储你得到的mat的clone(),例如:
People[i].setImage( grabbed.clone() );