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

问题描述 投票:0回答:2

我对此很陌生,但一直在阅读并尝试不同的设置来帮助缩小问题范围!任何帮助我克服这个障碍的帮助将不胜感激。

目前我正在运行:Win 7 Ultimate、Visual C++ 2010 Express、OpenCV 2.2.0 和 Microsoft - LifeCam Studio 网络摄像头 - 银色 1080p 高清。

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

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;
   }

}
c++ visual-studio-2010 visual-studio visual-c++ opencv
2个回答
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
投票

在 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 - 它将正常工作。

© www.soinside.com 2019 - 2024. All rights reserved.