如何在 Windows 通用应用程序中对焦相机?
How do I Focus a Camera in Windows Universal Apps?
我正在使用位于此处的 Windows OCR 通用示例:
https://github.com/Microsoft/Windows-universal-samples/tree/master/Samples/OCR/cs
特别是 OcrCapturedImage.xaml.cs
相机似乎经常变得不对焦、模糊,并且远不及本机相机应用程序的质量。如何设置自动对焦 and/or 点击以修复曝光?
到目前为止我已经尝试查看其他有助于设置分辨率的相机样本,但我找不到任何关于 focus/exposure。
更新:
我觉得
await mediaCapture.VideoDeviceController.FocusControl.FocusAsync();
和
await mediaCapture.VideoDeviceController.ExposureControl.SetAutoAsync(true);
但这不起作用(什么都不做 - 仍然模糊等),如果有人知道如何点击某个区域并相应地应用 focus/exposure,则可以建立它。
原生相机:
应用相机:
根据回答更新:
我一定是将焦点方法放在了错误的位置,因为我的原始更新代码有效。 Sergi 的也有效。我想结合使用点击事件,像这样:
Point tapped=e.GetPosition(null); //Where e is TappedRoutedEventArgs from a tapped event method on my preview screen
await mediaCapture.VideoDeviceController.RegionsOfInterestControl.ClearRegionsAsync();
await mediaCapture.VideoDeviceController.RegionsOfInterestControl.SetRegionsAsync(new[] { new RegionOfInterest() { Bounds = new Rect(tapped.X, tapped.Y, 0.02, 0.02) } }); //Throws Parameter Incorrect
但是它抛出的参数不正确。另外,我如何在预览屏幕上显示一个矩形叠加层,以便用户知道感兴趣的区域有多大?
使用 FocusControl
class 的 Configure
方法配置自动对焦。
mediaCapture.VideoDeviceController.FocusControl.Configure(
new FocusSettings { Mode = FocusMode.Auto });
await mediaCapture.VideoDeviceController.FocusControl.FocusAsync();
为了聚焦某个区域,RegionOfInterestControl
propery can be used. It has the SetRegionsAsync
method to add a collection of RegionOfInterest
instances. RegionOfInterest
has the Bounds
属性定义了聚焦区域。此示例显示如何将焦点设置在中心:
// clear previous regions of interest
await mediaCapture.VideoDeviceController.RegionOfInterestControl.ClearRegionsAsync();
// focus in the center of the screen
await mediaCapture.VideoDeviceController.RegionOfInterestControl.SetRegionsAsync(
new []
{
new RegionOfInterest() {Bounds = new Rect(0.49,0.49,0.02,0.02) }
});
我正在使用位于此处的 Windows OCR 通用示例:
https://github.com/Microsoft/Windows-universal-samples/tree/master/Samples/OCR/cs
特别是 OcrCapturedImage.xaml.cs
相机似乎经常变得不对焦、模糊,并且远不及本机相机应用程序的质量。如何设置自动对焦 and/or 点击以修复曝光?
到目前为止我已经尝试查看其他有助于设置分辨率的相机样本,但我找不到任何关于 focus/exposure。
更新:
我觉得
await mediaCapture.VideoDeviceController.FocusControl.FocusAsync();
和
await mediaCapture.VideoDeviceController.ExposureControl.SetAutoAsync(true);
但这不起作用(什么都不做 - 仍然模糊等),如果有人知道如何点击某个区域并相应地应用 focus/exposure,则可以建立它。
原生相机:
应用相机:
根据回答更新:
我一定是将焦点方法放在了错误的位置,因为我的原始更新代码有效。 Sergi 的也有效。我想结合使用点击事件,像这样:
Point tapped=e.GetPosition(null); //Where e is TappedRoutedEventArgs from a tapped event method on my preview screen
await mediaCapture.VideoDeviceController.RegionsOfInterestControl.ClearRegionsAsync();
await mediaCapture.VideoDeviceController.RegionsOfInterestControl.SetRegionsAsync(new[] { new RegionOfInterest() { Bounds = new Rect(tapped.X, tapped.Y, 0.02, 0.02) } }); //Throws Parameter Incorrect
但是它抛出的参数不正确。另外,我如何在预览屏幕上显示一个矩形叠加层,以便用户知道感兴趣的区域有多大?
使用 FocusControl
class 的 Configure
方法配置自动对焦。
mediaCapture.VideoDeviceController.FocusControl.Configure(
new FocusSettings { Mode = FocusMode.Auto });
await mediaCapture.VideoDeviceController.FocusControl.FocusAsync();
为了聚焦某个区域,RegionOfInterestControl
propery can be used. It has the SetRegionsAsync
method to add a collection of RegionOfInterest
instances. RegionOfInterest
has the Bounds
属性定义了聚焦区域。此示例显示如何将焦点设置在中心:
// clear previous regions of interest
await mediaCapture.VideoDeviceController.RegionOfInterestControl.ClearRegionsAsync();
// focus in the center of the screen
await mediaCapture.VideoDeviceController.RegionOfInterestControl.SetRegionsAsync(
new []
{
new RegionOfInterest() {Bounds = new Rect(0.49,0.49,0.02,0.02) }
});