在视频捕获期间显示灰色屏幕 - OpenCV

时间:2014-01-05 07:29:16

标签: c++ opencv video

我正在尝试从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);  
}

1 个答案:

答案 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指针。”