【问题标题】:OpenCV store image in Object (OOP)OpenCV 将图像存储在对象中 (OOP)
【发布时间】:2013-04-21 00:51:09
【问题描述】:

我在 C++ 中使用面向对象的方法使用 OpenCV 进行编程。基本上我有一个名为 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个窗口,它们都在显示相机上拍摄的最后一张图像。

我不知道什么是错的,有人可以请教吗?先感谢您。

【问题讨论】:

    标签: visual-c++ opencv


    【解决方案1】:

    “它们都在显示相机上最后捕获的图​​像。”

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

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

    People[i].setImage( grabbed.clone() );
    

    【讨论】:

    • 谢谢,它有效!然而,我偶然发现了另一个我无法弄清楚的问题。图像似乎延迟了一个,即 People[i].getImage() 显示为 People[i-1] 拍摄的图像。你能就这个问题提出建议吗?谢谢。
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-06-30
      • 1970-01-01
      • 2018-12-22
      • 1970-01-01
      • 2014-03-28
      • 1970-01-01
      相关资源
      最近更新 更多