VS 2010打开相机但只显示灰色窗口

时间:2012-12-21 00:24:10

标签: c++ visual-studio-2010 visual-studio visual-c++ opencv

我是新手,但我一直在阅读和尝试不同的设置,以帮助缩小问题!任何帮助让我越过这个路障都会非常感激。

目前我正在运行:Win 7 Ultimate,Visual C ++ 2010 Express,OpenCV 2.2.0和Microsoft - LifeCam Studio网络摄像头 - Silver 1080p HD。

我没有构建错误,当我运行程序时,我的相机亮起(蓝灯指示它正在亮起)屏幕弹出,我认为应该显示我的相机输入,但它只是一个灰色的盒子,没有任何东西内。我认为下面的代码有助于缩小问题的范围,但我不知所措。

int main()
{
CvCapture *webcam = NULL;
webcam = cvCreateCameraCapture(-1);
if(webcam!=NULL)
  {
   IplImage *frame = cvQueryFrame(webcam);
   cvShowImage("WEBCAM_TEST",frame);
   cvWaitKey(0);
   return 0;
  }
else
   {
     std::cout<<"CAMERA NOT DETECTED"<<std::endl;
     return 0;
   }

}

2 个答案:

答案 0 :(得分:3)

您的代码有时显示黑色图像,有时在我的系统上显示正确的图像(Windows 7 64 VS2010 OpenCV 2.4.3)...当我把它放在循环中以便非停止流式传输图像时...所以只需稍微修改你的代码并尝试......

#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <iostream>

using namespace cv;

int main()
{
CvCapture *webcam = NULL;
webcam = cvCreateCameraCapture(-1);

if(webcam!=NULL)
  {
    while(true)
    {
        IplImage *frame = cvQueryFrame(webcam);
        cvShowImage("WEBCAM_TEST",frame);
        cvWaitKey(20);
    }
  }
else
   {
     std::cout<<"CAMERA NOT DETECTED"<<std::endl;
     return 0;
   }

return 0;

}

答案 1 :(得分:1)

在OpenCV中,如果你在创建相机捕获后获得帧通常是灰色的。所有你需要做的就是获得下一帧或在获得第一帧之前等待。这段代码:

int _tmain(int argc, _TCHAR* argv[])
{
    VideoCapture cap(0);
    if(!cap.isOpened()) 
        return -1;

    Mat frame;
    namedWindow("01",1);

    //cap >> frame;   //option 1
    //waitKey(5000);   //option 2
    cap >> frame;
    imshow("01", frame);
    int key = waitKey(30);
    return 0;
}

将显示灰色框,但如果取消注释选项1或选项2 - 它将正常工作。