3

我是这方面的新手,但一直在阅读并尝试不同的设置来帮助缩小问题范围!任何帮助我克服这个障碍将不胜感激。

目前我正在运行:Win 7 Ultimate、Visual C++ 2010 Express、OpenCV 2.2.0 和 Microsoft - LifeCam Studio Webcam - 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;
   }

}
4

2 回答 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;

}
于 2012-12-21T01:22:14.577 回答
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 - 它会正常工作。

于 2012-12-22T01:08:00.117 回答