我正在开发一个需要实时访问网络摄像头的项目,并且在 Windows 10 下获取合适的摄像头流以使用 OpenCV 处理帧时遇到问题。
我可以在 Windows 8.1 下正常访问相机。使用任一
- OpenCV 2.4.9 与 Evgeny Pereguda 的 VideoInput 库 ( 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_WIDTH, 640);
cvCapture.set(CV_CAP_PROP_FRAME_HEIGHT, 480);
但是,在 Windows 10 下,上述两种解决方案都会导致问题:
- 使用 OpenCV 2.4.9 的解决方案,并且 VideoInput 库允许将分辨率设置为 640x480,但帧速率约为 1FPS(或更糟?!),并且图片很暗
- 使用 OpenCV 3.0 的解决方案以良好的帧速率为我提供了一个不错的 1920x1080 图像,但我无法设置流的分辨率
我什至尝试使用以下方法打开相机流:
cv::VideoCapture cvCapture(CV_CAP_DSHOW + camnum);
cv::VideoCapture 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 Pro 4 (Core i7) 上运行。这可能是硬件/相机驱动程序问题吗?我尝试查找 Surface 4 的更新驱动程序,但无济于事。
有没有人遇到过类似的问题?我忽略了一个明显的解决方案吗?