我正在尝试从OpenCV中的网络摄像头运行视频捕获程序。每次运行程序时,都会显示灰色屏幕。我最初尝试使用CvCapture函数在C API中编程,它工作得很好。但现在在C ++ API中,当我尝试运行以下使用VideoCapture的代码时,会显示灰色屏幕。
如何解决此问题?请帮忙。我的OpenCV版本是2.4.6,我在MS Visual Studio 2010 Professional中运行代码。
#include "opencv2/core/core.hpp"
#include "opencv2/highgui/highgui.hpp"
using namespace cv;
int main(int argc, char** argv)
{
VideoCapture capture(0);
Mat frame;
if( !capture.isOpened() )
throw "Error when reading steam_avi";
namedWindow( "w", 1);
for( ; ; )
{
capture.read(frame);
if(frame.empty())
break;
imshow("w", frame);
waitKey(1);
}
waitKey(0);
}
答案 0 :(得分:1)
我的笔记本电脑上的代码运行正常。确保您的相机设备没有被其他应用程序阻止,或者您可以尝试注释掉namedWindow调用(但这应该不是问题),实际上您可以使用以下循环从相机中获取视频帧:
VideoCapture capture(0);
Mat frame;
if( !capture.isOpened() )
throw "Error when reading steam_avi";
namedWindow( "w", 1);
while(capture.read(frame))
{
imshow("w", frame);
waitKey(1);
}
waitKey(0);
根据文档:“如果没有抓取任何帧(摄像机已断开连接,或视频文件中没有帧),则方法返回false,函数返回NULL指针。”