您好(我正在使用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;
}
}
}
}
}
}