我正在开发一个需要实时访问网络摄像头的项目,并且在Windows 10下获得合适的摄像头流以使用OpenCV处理帧时遇到问题。
我能够在Windows 8.1下正常访问相机。使用
这些允许以高帧率(~30fps)捕获网络摄像头流,并设置网络摄像头分辨率,例如。
cvCapture.set(CV_CAP_PROP_FRAME_WIDTH,640);
cvCapture.set(CV_CAP_PROP_FRAME_HEIGHT,480);
但是,在Windows 10下,上述两种解决方案都会导致问题:
我甚至尝试用以下方式打开相机流:
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找到更新的驱动程序,但无济于事。
有没有人有类似的问题?我有一个明显的解决方案吗?
答案 0 :(得分:1)
我认为您在Windows 10上使用videoInput的问题与选择正确的网络摄像头mediaType有关。事实上,OpenCV默认使用DirectShow,Media Foundation上的videoInput只是可选的。 我建议你正确检查变量:
float MF_MT_FRAME_RATE_RANGE_MAX;
float MF_MT_FRAME_RATE;
float MF_MT_FRAME_RATE_RANGE_MIN;
in
// Structure of info MediaType
struct MediaType
此外,我建议您访问网站Capture Manager Topology Editor - 这是一款免费软件,可通过Media Foundation使用网络摄像头。它允许在Surface Pro 4(Core i7)上验证Media Foundation的可访问功能。
最诚挚的问候, Evgeny Pereguda