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

Mar*_*alm 1 c webcam opencv video-capture frame

我是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;
}
Run Code Online (Sandbox Code Playgroud)

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

你能帮助我吗?

her*_*tao 7

你需要添加

cvWaitKey(30);
Run Code Online (Sandbox Code Playgroud)

到了while循环结束.


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

  1. 按键等待x毫秒.如果在此期间按下了某个键,它将返回该键的ASCII码.否则,它返回-1.
  2. 它可以处理任何窗口事件,例如使用窗口创建窗口cvNamedWindow()或显示图像cvShowImage().

opencv新手的一个常见错误是cvShowImage()通过视频帧调用循环,而不用跟踪每个抽奖cvWaitKey(30).在这种情况下,屏幕上不显示任何内容,因为highgui永远不会有时间处理来自的绘制请求cvShowImage().

请参阅OpenCV的cvWaitKey()函数有何功能?了解更多信息.