Win10+OpenCV无法正常读取USB摄像头数据解决方案

采用OpenCV中的VideoCapture类获取USB摄像头的数据时,使用下列代码

	VideoCapture VideoStream(0);
	if (!VideoStream.isOpened()) {
		cout << "Error: Cannot open video stream from camera" << endl;
		return 1;
	}
	Mat image;
	VideoStream.read(image);
	if (image.rows <= 0 || image.cols <= 0) {
		cout << "Camera did not grap  the image" << endl;
	}

代码在Win7+VS2015下可以正常读取USB摄像头中的数据,但是在Win10系统下发现仅能正常读取几帧数据后,就再也无法正常获取数据,[ WARN:1] videoio(MSMF): can’t grab frame. Error: -2147483638。查阅相关资料以及经过多次尝试后发现,声明语句应修改为:

	VideoCapture VideoStream(CAP_DSHOW);

运行后发现USB摄像头可以正常读取数据了,但是卡顿现象严重,因此,在此基础上又加入了下列代码,提高摄像头读取视频数据的流畅性。

	VideoStream.set(CV_CAP_PROP_FOURCC, cv::VideoWriter::fourcc('M', 'J', 'P', 'G'));
    VideoStream.set(CV_CAP_PROP_FRAME_WIDTH, 640);
    VideoStream.set(CV_CAP_PROP_FRAME_HEIGHT, 480);

然后在Win10系统下可以用OpenCV流畅的读取USB摄像头的数据,问题解决。

你可能感兴趣的:(解决问题)