带有视频捕获卡的Opencv只有在c ++代码中设置了断点时才会抓取帧

时间:2013-08-16 21:43:44

标签: opencv

Capturing a video with video capture card, opencv

以上问题几乎问我想要什么。我有一个elgato(elgato视频捕捉http://www.elgato.com/video/video-capture)帧抓取器,它有USB 2.0接口。我试图使用opencv从elgato帧抓取器抓取帧。帧抓取发生在while循环中,如下所示。

grabSuccess        = ( cvGrabFrame (captureDev[0]) == 1 );
frameGrabbed       = (grabSuccess ? cvRetrieveFrame (captureDev[0]) : NULL);    
while (1)
{

    grabSuccess  = ( cvGrabFrame (captureDev[0]) == 1);
    frameGrabbed = (grabSuccess ? cvRetrieveFrame (captureDev[0]) : NULL);
      .
      .
      .
      //some processing
      .
      .
      .
      //show image here
}

当我在循环之前设置断点并在调试器在断点处停止后继续执行。一切正常(视频帧显示在cvWindow中)。 但是如果没有断点中断,我会看到一个空白的灰色窗口。

任何帮助都将不胜感激。

P:S:我正在使用opencv 2.3.1在Windows 8中使用visual studio 2012 express进行开发, elgato规格如下:  1)视频分辨率:640×480(4:3)或640×360(16:9)  2)视频格式PC软件:H.264,1.4 MBit / sec

1 个答案:

答案 0 :(得分:0)

添加

cv::waitKey(1);

在代码行之后在窗口中显示图像。

cv :: waitKey()告诉计算机等待一段时间(此处为1ms)在窗口中呈现图像 cv :: waitKey() _getch()非常相似,它等待用户输入密钥。