-1

我在这里看到了与这个问题类似的其他帖子,甚至凝视并尝试尝试所有可能的方法,但它们都不适合我。以下代码只是从网络摄像头无限捕获图像,代码正在成功构建,出现错误“错误:捕获为空”。

Windows 7 是否支持 opencv2.2.0,我在许多帖子中看到提到在窗口 7 中使用 Direct show 进行视频捕获

#include<opencv/cxcore.h>
#include<opencv/highgui.h>
#include<opencv/cxcore.h>

#include<stdio.h>
#include<stdlib.h>

int main(int argc,char* argv[])
{
    CvSize size640x480 = cvSize(640,480);
    CvCapture* p_capWebcam;
    IplImage* p_imgOriginal;

    p_capWebcam=cvCaptureFromCAM(0);//i tried p_capWebcam=cvCaptureFromCAM(CV_CAP_ANY) 
                                    //i tried index from -1 to 10 but nothing worked
    if(p_capWebcam==NULL)
{
    printf("error:capture is NULL");
    getchar();
    return -1;
}


    cvNamedWindow("Original",CV_WINDOW_AUTOSIZE);
    while(1)
    {
    p_imgOriginal=cvQueryFrame(p_capWebcam);
    if(p_imgOriginal=NULL)
    {
        printf("error :frame is NULL \n");
        break;
    }
    cvWaitKey(10);
    cvShowImage("Original",p_imgOriginal);

    }
}

IDE 是 Microsoft Visual C++ 2010 Express,

Webcamera(Frontech) usb2.0 支持以下格式 {'YUY2_160x120' 'YUY2_176x144' 'YUY2_320x240' 'YUY2_352x288' 'YUY2_640x480'}

4

1 回答 1

0

您在cvWaitKey(10);cvShowImage() 之后缺少调用(因此您的窗口不会更新)。


请移到 c++ api,过时的 c-api 将不再受支持。

所以,整个事情应该看起来更像这样:

#include "opencv2/highgui/highgui.hpp"
#include "opencv2/core/core.hpp"

using namespace cv;

int main() 
{
    VideoCapture cap(0);
    while( cap.isOpened() )
    {
        Mat frame;
        if ( ! cap.read(frame) )
            break;
        imshow("lalala",frame);
        int k = waitKey(10);
        if ( k==27 )
            break;
    }
    return 0;
}
于 2013-12-22T10:36:17.293 回答