在Windows 10/OpenCV下访问网络摄像头时出现问题

Problems accessing web camera under Windows 10 / OpenCV

本文关键字:摄像头 问题 网络 访问 Windows OpenCV      更新时间:2023-10-16

我正在进行一个需要实时访问网络摄像头的项目,在Windows 10下获取合适的摄像头流以使用OpenCV处理帧时遇到了问题。

在Windows 8.1下,我可以很好地访问相机。使用任一

  • OpenCV 2.4.9与Evgeny Pereguda的视频输入图书馆(http://www.codeproject.com/Articles/776058/Capturing-Live-video-from-Web-camera-on-Windows-an)用于通过Windows Media Foundation访问相机,或
  • 没有任何附加库的OpenCV 3.0

这允许以高帧率(约30fps)捕获网络摄像头流,并使用例如设置网络摄像头分辨率

cvCapture.set(CV_CAP_PROP_FRAME_WITH,640)

cvCapture.set(CV_CAP_PROP_FRAME_HEIGHT,480)

然而,在Windows10下,上述两种解决方案都会导致问题:

  • 使用OpenCV 2.4.9和VideoInput库的解决方案允许将分辨率设置为640x480,但帧速率约为1FPS(或者更糟?!),画面非常黑暗
  • 使用OpenCV 3.0的解决方案以良好的帧速率为我提供了一个不错的1920x1080图像,但我无法设置流的分辨率

我甚至试着用打开相机流

cv::视频捕获cvCapture(cv_CAP_DSHOW+camnum)

cv::视频捕获cvCapture(cv_CAP_MSMF+camnum)

第一个有效(就打开流而言,但存在与上述相同的问题),MSMF(Microsoft Media Foundation)导致cvCapture.isOpened()返回false;

对于图像处理算法来说,实时处理FullHD流是不可行的,使用OpenCV缩小结果帧的大小也是不可行的。

Windows 8.1版本在Surface Pro 3(Core i7)上运行,Windows 10版本在Surface Pro4(Core i5)上运行。这可能是硬件/摄像头驱动程序的问题吗?我试着为Surface 4寻找更新的驱动程序,但没有成功。

有人遇到过类似的问题吗?有没有一个明显的解决方案我忽略了?

我认为您在Windows 10上使用videoInput的问题与选择正确的网络摄像机媒体类型有关。事实上,OpenCV默认使用DirectShow,而Media Foundation上的videoInput只是可选的。我建议您正确检查变量:

float MF_MT_FRAME_RATE_RANGE_MAX;
float MF_MT_FRAME_RATE;
float MF_MT_FRAME_RATE_RANGE_MIN;

在中

// Structure of info MediaType 
struct MediaType

此外,我可以建议访问网站上的Capture Manager拓扑编辑器-这是一个通过Media Foundation与网络摄像头合作的免费软件。它允许在Surface Pro 4(Core i7)上验证Media Foundation的可访问功能。

谨此致意,叶夫根尼·佩雷古达