【问题标题】:Capture image from webcam and display it - OpenCV - Eclipse - Windows从网络摄像头捕获图像并显示它 - OpenCV - Eclipse - Windows
【发布时间】:2023-04-08 02:27:02
【问题描述】:

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

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

你能帮帮我吗?

【问题讨论】:

    标签: c opencv frame webcam video-capture


    【解决方案1】:

    你需要添加

    cvWaitKey(30);
    

    while-loop 结束。


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

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

    opencv 新手的一个常见错误是通过视频帧循环调用cvShowImage(),而没有使用cvWaitKey(30) 跟踪每次绘制。在这种情况下,屏幕上不会出现任何内容,因为 highgui 从来没有时间处理来自cvShowImage() 的绘图请求。

    请参阅What does OpenCV's cvWaitKey( ) function do? 了解更多信息。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-08-18
      • 2013-06-03
      • 2013-02-09
      • 2013-03-17
      • 2012-08-08
      • 2013-01-18
      相关资源
      最近更新 更多