在Windows 10 / OpenCV

时间:2015-12-16 21:06:47

标签: c++ opencv camera windows-10-desktop

我正在开发一个需要实时访问网络摄像头的项目,并且在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下,上述两种解决方案都会导致问题:

  • 使用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找到更新的驱动程序,但无济于事。

有没有人有类似的问题?我有一个明显的解决方案吗?

1 个答案:

答案 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