在OpenCV中捕获和显示视频

时间:2013-12-30 06:55:40

标签: c++ visual-studio-2010 opencv

我使用OpencV 2.2版在Visual Studio2010中执行了一个简单的C ++程序来启动摄像头并正常显示视频。但是摄像头启动了,只有窗口作为输出而不是视频捕获。这是我的代码。相机中有任何错误。我们需要安装任何软件。请尽快建议。

#include "stdafx.h"
#include <cv.h>
#include <highgui.h>
#include <stdio.h>
#include <conio.h> 

int main()
{
CvCapture* capture =0;       
capture = cvCaptureFromCAM(0);
if(!capture)
    {
       printf("Capture failure\n");
       return -1;
    }
IplImage* frame=NULL;
cvNamedWindow("Video");      
cvNamedWindow ("Ball");
//iterate through each frames of the video      
while(true)
    {
            frame = cvQueryFrame(capture);      
            if(!frame) break;
            //frame=cvCloneImage(frame); 
            cvShowImage("Video", frame);    
        //Clean up used images
            cvReleaseImage(&frame);
        //Wait 50mS
            int c = cvWaitKey(10);
        //If 'ESC' is pressed, break the loop
            if((char)c==27 ) break;   
       }
cvDestroyAllWindows() ;
//cvReleaseCapture(&capture); 
return 0; 

}

并且输出窗口中的警告为:

OpenCV错误:未知f中的错误参数(无法识别或不支持的数组类型) unction,file ........ \ ocv \ opencv \ modules \ core \ src \ array.cpp,第995行

1 个答案:

答案 0 :(得分:4)

导致错误,因为您正在释放cvQueryFrame返回的帧。文档中指出,视频的所有帧仅使用单个图像缓冲区。因此,修改cvQueryFrame返回的帧将释放该缓冲区,后续调用将失败。

要解决此问题,只需删除cvReleaseImage(&frame);即可。

如果要修改框架,请使用cvCloneImage创建框架的深层副本。

另外,完成后不要忘记释放捕获。

cvReleaseCapture(&capture);