我使用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行
答案 0 :(得分:4)
导致错误,因为您正在释放cvQueryFrame
返回的帧。文档中指出,视频的所有帧仅使用单个图像缓冲区。因此,修改cvQueryFrame
返回的帧将释放该缓冲区,后续调用将失败。
要解决此问题,只需删除cvReleaseImage(&frame);
即可。
如果要修改框架,请使用cvCloneImage
创建框架的深层副本。
另外,完成后不要忘记释放捕获。
cvReleaseCapture(&capture);