0

我正在开发一个需要从笔记本电脑网络摄像头扫描二维码的 UWP 应用程序。我为此使用了 Windows.Media.Capture.MediaCapture 类。一切正常,除了在智能手机上使用二维码时,它的亮度设置得太高,无法满足内置网络摄像头有限的动态范围。网络摄像头的自动曝光处于活动状态,但与环境相比,屏幕仍然太亮。

我正在寻找一种手动或使用某种曝光补偿模式来控制或覆盖亮度或曝光的方法。

在我的常规内置网络摄像头上启用/工作的唯一与亮度/曝光有关的属性是亮度和对比度,它们会相应地更改图像,但看起来它们是后处理效果。它们不会改变相机本身的曝光,因此无法解决问题。

mediaCapture.VideoDeviceController.ExposureCompensationControl.Supported;
mediaCapture.VideoDeviceController.ExposureControl.Supported;
mediaCapture.VideoDeviceController.ExposurePriorityVideoControl.Supported;
mediaCapture.VideoDeviceController.Exposure.Capabilities.Supported;

全部返回假

mediaCapture.VideoDeviceController.Brightness.TrySetValue(10);

改变图像,但高光仍然被洗掉,没有细节可供扫描仪拾取

4

2 回答 2

2

关于通过 Windows 驱动程序以编程方式控制相机曝光,您正在考虑正确的界面。使用MS Surface Pro 4,我已经成功修改了使用这个界面的曝光:

mediaCapture.VideoDeviceController.ExposureControl

此外,MS 还提供了一些很好的示例和文档来说明如何使其工作。请记住,如果您的硬件不支持曝光功能,示例(和 MS 相机应用程序)将隐藏控件。

https://docs.microsoft.com/en-us/windows/uwp/audio-video-camera/capture-device-controls-for-photo-and-video-capture

https://github.com/microsoft/Windows-universal-samples/tree/master/Samples/CameraManualControls

无法访问成像控制(例如曝光)实际上与质量无关。它更多地与相机解决方案的完整性有关。相机传感器有一个控制接口(例如 i2c),它与驱动图像的数据接口是分开的。大多数第三方摄像头模块不会实现启用这些控件所需的硬件/软件。

于 2019-11-15T00:52:19.777 回答
1

VideoDeviceController 的控件对象(例如,ExposureCompensationControl.Supported)的 Supported 属性并不总是提供准确的信息,除非相机处于活动状态。因此,在询问是否支持相机控件之前,请确保开始预览或帧捕获。

VideoDeviceController

某些驱动程序可能要求相机设备预览处于运行状态,然后才能确定 VideoDeviceController 支持哪些控件。如果在预览流运行之前检查某个控件是否被 VideoDeviceController 支持,即使视频设备支持该控件,也可能会被描述为不支持。

于 2021-12-08T19:12:37.890 回答