从网络摄像头捕获图像并显示它 - OpenCV - Eclipse - Windows

时间:2014-01-24 15:34:42

标签: c opencv frame webcam video-capture

我是OpenCV的新手,我想显示我的网络摄像头看到的OpenCV。我正在使用C编码语言。

我尝试过这段代码:

#include <stdio.h>

#include <cv.h> // Include the OpenCV library
#include <highgui.h> // Include interfaces for video capturing

int main()
{
    cvNamedWindow("Window", CV_WINDOW_AUTOSIZE);
    CvCapture* capture =cvCreateCameraCapture(-1);
    if (!capture){
        printf("Error. Cannot capture.");
    }
    else{
        cvNamedWindow("Window", CV_WINDOW_AUTOSIZE);

        while (1){
            IplImage* frame = cvQueryFrame(capture);
            if(!frame){
                printf("Error. Cannot get the frame.");
                break;
            }
        cvShowImage("Window",frame);
        }
        cvReleaseCapture(&capture);
        cvDestroyWindow("Window");
    }
    return 0;
}

我的网络摄像头的指示灯亮起,但结果是一个完全灰色的窗口,没有图像。

你能帮助我吗?

1 个答案:

答案 0 :(得分:7)

您需要添加

cvWaitKey(30);

while - 循环结束。


cvWaitKey(x) / cv::waitKey(x)做了两件事:

  1. 等待按键的 x 毫秒。如果在此期间按下了某个键,它将返回该键的ASCII码。否则,它返回-1
  2. 它处理任何窗口事件,例如使用cvNamedWindow()创建窗口,或使用cvShowImage()显示图像。
  3. opencv新手的一个常见错误是通过视频帧循环调用cvShowImage(),而不用cvWaitKey(30)跟进每次抽奖。在这种情况下,屏幕上不显示任何内容,因为从未给予highgui处理来自cvShowImage()的绘制请求的时间。

    有关详细信息,请参阅What does OpenCV's cvWaitKey( ) function do?