在 Windows 下访问网络摄像头时出现问题 10 / OpenCV
Problems accessing web camera under Windows 10 / OpenCV
我正在做一个需要实时访问网络摄像头的项目,但在 Windows10 下获取合适的摄像头流以使用 OpenCV 处理帧时遇到问题。
我可以在 Windows 8.1 下正常访问相机。使用
- 带有 Evgeny Pereguda 的 VideoInput 的 OpenCV 2.4.9
图书馆(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) 上是 运行,在 Surface Pro 4 (Core i7) 上是 Windows 10 版本。这可能是硬件/相机驱动程序问题吗?我尝试为 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 Topology Editor - 这是一款通过 Media Foundation 使用网络摄像头的免费软件。它允许在 Surface Pro 4 (Core i7) 上验证 Media Foundation 的可访问功能。
谨致问候,
叶夫根·佩雷古达
我正在做一个需要实时访问网络摄像头的项目,但在 Windows10 下获取合适的摄像头流以使用 OpenCV 处理帧时遇到问题。
我可以在 Windows 8.1 下正常访问相机。使用
- 带有 Evgeny Pereguda 的 VideoInput 的 OpenCV 2.4.9 图书馆(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) 上是 运行,在 Surface Pro 4 (Core i7) 上是 Windows 10 版本。这可能是硬件/相机驱动程序问题吗?我尝试为 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 Topology Editor - 这是一款通过 Media Foundation 使用网络摄像头的免费软件。它允许在 Surface Pro 4 (Core i7) 上验证 Media Foundation 的可访问功能。
谨致问候, 叶夫根·佩雷古达