Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
V tomto článku se dozvíte, jak pomocí ručních ovládacích prvků zařízení povolit vylepšené scénáře zachycení videa, včetně videa HDR a priority expozice.
Ovládací prvky videozahod, které jsou popsány v tomto článku, se do vaší aplikace přidají stejným způsobem. Nejprve zkontrolujte, jestli je ovládací prvek podporovaný na aktuálním zařízení, na kterém je vaše aplikace spuštěná. Pokud je ovládací prvek podporovaný, nastavte požadovaný režim ovládacího prvku. Obvykle platí, že pokud je na aktuálním zařízení nepodporovaný konkrétní ovládací prvek, měli byste zakázat nebo skrýt prvek uživatelského rozhraní, který uživateli umožňuje povolit funkci.
Poznámka:
Tento článek vychází z konceptů a kódu probíraných v základní fotce, videu a zvukovém záznamu pomocí MediaCapture, který popisuje kroky pro implementaci základního zachycení fotek a videí. Než přejdete k pokročilejším scénářům zachycení, doporučujeme seznámit se se základním vzorem zachycení médií v tomto článku. Kód v tomto článku předpokládá, že vaše aplikace již má instanci MediaCapture , která byla správně inicializována.
HDR video
Funkce videa s vysokým dynamickým rozsahem (HDR) aplikuje zpracování HDR na video stream zařízení pro zachycení. Určete, zda je video HDR podporováno výběrem HdrVideoControl.Supported vlastnost.
Ovládací prvek videa HDR podporuje tři režimy: zapnuto, vypnuto a automatické, což znamená, že zařízení dynamicky určuje, jestli by zpracování videa HDR zlepšilo zachytávání médií, a pokud ano, povolí HDR video. Pokud chcete zjistit, jestli je na aktuálním zařízení podporovaný konkrétní režim, zkontrolujte, jestli kolekce HdrVideoControl.SupportedModes obsahuje požadovaný režim.
Povolte nebo zakažte zpracování videa HDR nastavením HdrVideoControl.Mode na požadovaný režim. Tento ovládací prvek vyžaduje, aby byl datový proud před nastavením režimu v zastaveném stavu, viz KSPROPERTY_CAMERACONTROL_EXTENDED_VIDEOHDR.
private void SetHdrVideoMode(HdrVideoMode mode)
{
if (!m_mediaCapture.VideoDeviceController.HdrVideoControl.Supported)
{
tbStatus.Text = "HDR Video not available";
return;
}
var hdrVideoModes = m_mediaCapture.VideoDeviceController.HdrVideoControl.SupportedModes;
if (!hdrVideoModes.Contains(mode))
{
tbStatus.Text = "HDR Video setting not supported";
return;
}
m_mediaCapture.VideoDeviceController.HdrVideoControl.Mode = mode;
}
Priorita expozice
ExposurePriorityVideoControl, pokud je povoleno, vyhodnocuje snímky videa ze zachytácího zařízení a určí, jestli video zachycuje scénu s nízkým osvětlením. Pokud ano, ovládací prvek sníží frekvenci snímků zachyceného videa, aby zvýšil dobu expozice pro každý snímek a zlepšil vizuální kvalitu zachyceného videa.
Zjistěte, zda je na aktuálním zařízení podporován ovládací prvek priority expozice kontrolou vlastnosti ExposurePriorityVideoControl.Supported.
Povolte nebo zakažte řízení priority expozice nastavením ExposurePriorityVideoControl.Enabled do požadovaného režimu.
if (!m_mediaCapture.VideoDeviceController.ExposurePriorityVideoControl.Supported)
{
tbStatus.Text = "Exposure priority not available";
return;
}
m_mediaCapture.VideoDeviceController.ExposurePriorityVideoControl.Enabled = true;
Časová denoizace
Od Windows 10 verze 1803 můžete povolit dočasné označení videa na zařízeních, která ho podporují. Tato funkce sloučí data obrázků z několika sousedních snímků v reálném čase, aby se vytvořily snímky videa, které mají méně vizuálního šumu.
VideoTemporalDenoisingControl umožňuje vaší aplikaci zjistit, jestli je na aktuálním zařízení podporováno časové odšumování, a pokud ano, jaké režimy odšumování jsou podporovány. Dostupné režimy denoizace jsou vypnuté, zapnuté a automatické. Zařízení nemusí podporovat všechny režimy, ale každé zařízení musí podporovat buď automatické nebo zapnuté a vypnuté.
Následující příklad používá jednoduché uživatelské rozhraní k poskytování rádiových tlačítek, která uživateli umožňují přepínat mezi režimy potlačení šumu.
<StackPanel Orientation="Vertical" HorizontalAlignment="Right" >
<StackPanel x:Name="spDenoise" Visibility="Collapsed">
<TextBlock>Temporal Denoising</TextBlock>
<RadioButton x:Name="rbDenoiseOff" Checked="rbDenoise_Checked"
GroupName="Denoise Group" Content="Off"/>
<RadioButton x:Name="rbDenoiseOn" Checked="rbDenoise_Checked"
GroupName="Denoise Group" Content="On" Visibility="Collapsed"/>
<RadioButton x:Name="rbDenoiseAuto" Checked="rbDenoise_Checked"
GroupName="Denoise Group" Content="Auto" Visibility="Collapsed"/>
</StackPanel>
</StackPanel>
V následující metodě se ověřuje vlastnost VideoTemporalDenoisingControl.Supported, aby se zjistilo, zda je na aktuálním zařízení vůbec podporováno dočasné odšumování. Pokud ano, zkontrolujeme, jestli jsou podporovány možnosti Vypnuto, Automaticky nebo Zapnuto. V takovém případě zviditelníme naše rádiová tlačítka. V dalším kroku se tlačítka Automatické a zapnuté zobrazí, pokud jsou tyto metody podporovány.
private void bUpdateDenoiseCapabilities_Click(object sender, RoutedEventArgs e)
{
if (m_mediaCapture.VideoDeviceController.VideoTemporalDenoisingControl.Supported)
{
IReadOnlyList<VideoTemporalDenoisingMode> modes = m_mediaCapture.VideoDeviceController.VideoTemporalDenoisingControl.SupportedModes;
if(modes.Contains(Windows.Media.Devices.VideoTemporalDenoisingMode.Off) &&
(modes.Contains(Windows.Media.Devices.VideoTemporalDenoisingMode.On) ||
modes.Contains(Windows.Media.Devices.VideoTemporalDenoisingMode.Auto)))
{
spDenoise.Visibility = Visibility.Visible;
if (modes.Contains(Windows.Media.Devices.VideoTemporalDenoisingMode.On))
{
rbDenoiseOn.Visibility = Visibility.Visible;
}
if (modes.Contains(Windows.Media.Devices.VideoTemporalDenoisingMode.Auto))
{
rbDenoiseAuto.Visibility = Visibility.Visible;
}
}
}
}
V obslužné rutině pro událost Checked u přepínačů se zkontroluje název tlačítka a odpovídající režim se nastaví vlastností VideoTemporalDenoisingControl.Mode.
private void rbDenoise_Checked(object sender, RoutedEventArgs e)
{
var button = sender as RadioButton;
if(button.Name == "denoiseOffButton")
{
m_mediaCapture.VideoDeviceController.VideoTemporalDenoisingControl.Mode = Windows.Media.Devices.VideoTemporalDenoisingMode.Off;
}
else if (button.Name == "denoiseOnButton")
{
m_mediaCapture.VideoDeviceController.VideoTemporalDenoisingControl.Mode = Windows.Media.Devices.VideoTemporalDenoisingMode.On;
}
else if (button.Name == "denoiseAutoButton")
{
m_mediaCapture.VideoDeviceController.VideoTemporalDenoisingControl.Mode = Windows.Media.Devices.VideoTemporalDenoisingMode.Auto;
}
}
Zakázání dočasného denoizace při zpracování snímků
Video, které bylo zpracováno pomocí časového odšumění, může být pro lidské oko příjemnější. Vzhledem k tomu, že dočasné odšumění může mít vliv na konzistenci obrázku a snížit množství podrobností v obraze, mohou aplikace, které provádějí zpracování obrázků na snímcích, jako je registrace nebo optické rozpoznávání textu, programově deaktivovat odšumění při povoleném zpracování obrázku.
Následující příklad určuje, které režimy denoizace jsou podporovány, a ukládá tyto informace do některých proměnných třídy.
private bool _isVideoTemporalDenoisingOffSupported = false;
private bool _isProcessing = false;
private Windows.Media.Devices.VideoTemporalDenoisingMode? _videoDenoisingEnabledMode = null;
private void ConfigureDenoiseForFrameProcessing()
{
if (m_mediaCapture.VideoDeviceController.VideoTemporalDenoisingControl.Supported)
{
// Query support for the VideoTemporalDenoising control Off mode
_isVideoTemporalDenoisingOffSupported = m_mediaCapture.VideoDeviceController.VideoTemporalDenoisingControl.SupportedModes.Contains(Windows.Media.Devices.VideoTemporalDenoisingMode.Off);
// Query support for a mode that would enable VideoTemporalDenoising (On or Auto) and toggle it if supported
if (m_mediaCapture.VideoDeviceController.VideoTemporalDenoisingControl.SupportedModes.Contains(Windows.Media.Devices.VideoTemporalDenoisingMode.On))
{
_videoDenoisingEnabledMode = Windows.Media.Devices.VideoTemporalDenoisingMode.On;
m_mediaCapture.VideoDeviceController.VideoTemporalDenoisingControl.Mode = (Windows.Media.Devices.VideoTemporalDenoisingMode)_videoDenoisingEnabledMode;
}
else if (m_mediaCapture.VideoDeviceController.VideoTemporalDenoisingControl.SupportedModes.Contains(Windows.Media.Devices.VideoTemporalDenoisingMode.Auto))
{
_videoDenoisingEnabledMode = Windows.Media.Devices.VideoTemporalDenoisingMode.Auto;
m_mediaCapture.VideoDeviceController.VideoTemporalDenoisingControl.Mode = (Windows.Media.Devices.VideoTemporalDenoisingMode)_videoDenoisingEnabledMode;
}
}
}
Když aplikace povolí zpracování snímků, nastaví režim denoizace na Vypnuto , pokud je tento režim podporován tak, aby zpracování snímků mohlo používat nezpracované snímky, které nebyly denoizovány.
public void EnableFrameProcessing()
{
// Toggle Off VideoTemporalDenoising
if (_isVideoTemporalDenoisingOffSupported)
{
m_mediaCapture.VideoDeviceController.VideoTemporalDenoisingControl.Mode = Windows.Media.Devices.VideoTemporalDenoisingMode.Off;
}
_isProcessing = true;
}
Když aplikace zakáže zpracování snímků, nastaví režim denoizace na Zapnuto nebo Automaticky v závislosti na tom, který režim je podporovaný.
public void DisableFrameProcessing()
{
_isProcessing = false;
// If a VideoTemporalDenoising mode to enable VideoTemporalDenoising is supported, toggle it
if (_videoDenoisingEnabledMode != null)
{
m_mediaCapture.VideoDeviceController.VideoTemporalDenoisingControl.Mode = (Windows.Media.Devices.VideoTemporalDenoisingMode)_videoDenoisingEnabledMode;
}
}
Další informace o získání snímků videa pro zpracování obrázků naleznete v tématu Zpracování multimediálních snímků pomocí MediaFrameReader.
Související témata
Windows developer