OpenCV Videocapture SOMETIMES失败了

时间:2017-04-16 14:04:18

标签: c++ opencv video-capture

您好(我正在使用Qt5.7 MinGW在Windows 8上使用OpenCV 2.4.13),

我对OpenCV有一个非常奇怪的问题。我尝试在线程中抓取视频帧。它在发布模式下始终运行良好。为了部署我的程序,我将.exe复制到一个文件夹中并包含了.exe的所有依赖项。然后我用NSIS构建了一个安装程序。

在多台计算机上,程序始终有效。但是,在两台计算机(Win 8和Win 7)上,视频捕获有时会失败。有时我启动程序,一切都很好。其他时候,我启动程序,所有帧都是空的。在后一种情况下,capture.open(0)返回1即可,但帧是空的。

我试过这个:当我得到10个空帧时,我释放视频捕获,重新打开相机并尝试抓取帧。但它不起作用,帧总是空的。

这两台计算机的共同点是它们具有AVG。当AVG打开时,捕获失败的可能性更大。当我以管理员身份运行程序时,捕获失败的可能性也更大。

我正在使用Qt5.7 MinGW在Windows 8上使用OpenCV 2.4.13。 这是我的代码的一部分。

cv::VideoCapture capture; 
int test1=capture.open(0); // This returns 1 so it's ok. 
while(test1)
{ 
   capture >> frame;   
   if (!frame.empty())
   {
     //code here (when it fails it does not enter here)
   }
   else
   {
     //code here (when it fails it does enter here)
   }
}

任何想法????

非常感谢你,

亚历

编辑:代码:

if (m_ValidControl == 1)
{
    int test1=capture.open(0);

  if (test1==1)
  {
    CountNoCam = 0;
    for (int k = 0; k < 100; k++)
    {
        capture >> frame;

        if (!frame.empty())
        {
            cv::Mat frametemp1;
            cv::resize(frame, frametemp1, cv::Size(640, 480), 0, 0);
            std::shared_ptr<cv::Mat> frameshow = std::make_shared<cv::Mat>(cv::Mat());
            frametemp1.copyTo(*frameshow);
            (p_blackboard->get_frameshow())->store(frameshow);//storedone
        }
        else //when it fails it enters here each time
        {
            CountNoCam++;
            if (CountNoCam > 100)
                CountNoCam = 100;

            if (CountNoCam > 10)
            {
                std::shared_ptr<int> stop = std::make_shared<int>(1);
                p_blackboard->get_stopthreads()->store(stop);
                break;
            }
        }
    }
  }
}

}

0 个答案:

没有答案