在Windows 10/OpenCV下访问网络摄像头时出现问题
Problems accessing web camera under Windows 10 / OpenCV
我正在进行一个需要实时访问网络摄像头的项目,在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的可访问功能。
谨此致意,叶夫根尼·佩雷古达
- 警告处理为错误这里有什么问题
- 最小硬币更换问题(自上而下方法)
- 为"adjacent"变量赋值时出现问题
- 我的神经网络不起作用 [XOR 问题]
- 在Ubuntu 16.04上安装Cilk时出现问题
- C++我的数学有什么问题,为什么我的代码不能正确循环
- 编译包含字符串的代码时遇到问题
- Project Euler问题4的错误解决方案
- 问题:什么是QAbstractItemView::NoEditTriggers的反面
- 在编译C++代码(具有dlib和opencv)到WASM时面临问题
- 在进程中对同一管道进行读取和写入时C++管道出现问题
- 静态数据成员的问题-修复链接错误会导致编译器错误
- C++ 雷神库 - 使用资源加载器类时出现问题(不命名类型)
- 一个关于在C++中重载布尔运算符的问题
- 首要问题的答案让值班员搞错了
- setlocale的C++土耳其字符串问题
- OpenCV-从C/C++中的默认网络摄像头获取图片-GTK问题
- 问题5.2.0缺少摄像头服务
- 在Windows 10/OpenCV下访问网络摄像头时出现问题
- openCV-网络摄像头的视频捕获-延迟问题