gpt4 book ai didi

c++ - 在 Windows 10/OpenCV 下访问网络摄像头的问题

转载 作者:太空宇宙 更新时间:2023-11-03 22:53:50 24 4
gpt4 key购买 nike

我正在从事一个需要实时访问网络摄像头的项目,但在 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 查找更新的驱动程序,但无济于事。

有没有人遇到过类似的问题?有没有我忽略的明显解决方案?

最佳答案

我认为您在 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 的可访问功能。

谨致问候,叶夫根·佩鲁古达

关于c++ - 在 Windows 10/OpenCV 下访问网络摄像头的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34322104/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com