Opencv调取摄像头失败的处理方法

最近想学习一下opencv,就弄了一本《学习opencv》的书看,书中的例子也随便敲一敲。可是,在调去摄像头时出现了如下问题。具体代码如下:

#include "stdafx.h"  
#include "opencv/cv.h"  
#include "opencv/highgui.h"  
#include "stdio.h"  
#include 

int main()
{

	cvNamedWindow("video", CV_WINDOW_AUTOSIZE);
	CvCapture* capture = NULL;
	capture = cvCaptureFromCAM(1);
	IplImage*frame;
	while (1){
		frame = cvQueryFrame(capture);
		if (!frame)break;
		cvShowImage("video", frame);
		char c = cvWaitKey(330);
		if (c == 27)break;
	}
	cvReleaseCapture(&capture);
}

始终出现摄像头无法打开,或者就是显示灰色的画面,或者选择视频源之后画面一闪就消失了,如下图所示:

Opencv调取摄像头失败的处理方法_第1张图片

始终不得其解,程序没问题,摄像头也没问题,为何别人都能行,我的就不可以。心里郁闷,有问题就上网搜吧。有的说是调用的函数的问题,有的说是摄像头格式的问题,还有的说是opencv本身的bug,有的还说是win7不兼容......结果我换了摄像头,vs,opencv版本,我的问题依旧没有得到解决。无奈,只能暂时放下了。有一天看到《opencv3编程入门》这本书,上面有一个调用摄像头采集图像的例子,程序如下:

#include "stdafx.h"
#include "opencv2/opencv.hpp"
#include 
using namespace cv;
int main(int argc, char** argv)
{
	VideoCapture capture(0);
	while (1)
	{
		Mat frame;
		capture >> frame;
		imshow("读取视频", frame);
		waitKey(30);
	}
	return 0;
}
终于将摄像头调取出来了,结果如下所示:
Opencv调取摄像头失败的处理方法_第2张图片

可是为什么用的同样是opencv函数,为什么之前的不行,现在的可以呢?笔者认为,之前使用的opencv函数可能版本过低,还是opencv1.0时的函数。不论怎么样,这个问题是解决了,希望对遇有类似问题的人有所帮助。

你可能感兴趣的:(图像)