Cardoso Gabriel Schade - Microsoft Kinect: Crie aplicações interativas стр 9.

Шрифт
Фон

4.1

Formatos

A câmera de cores do Kinect possui uma série de configurações, que influência diretamente na qualidade da imagem e na quantidade de quadros por segundo que o

Kinect consegue processar. A tabela 4.2 ilustra estas resoluções.

28

Casa do Código

Capítulo 4. Fluxo de Cores

Figura 4.2: Tabela de Configurações da Câmera RGB

Você provavelmente já ouviu falar sobre o formato RGB ou (Red-Green-Blue),

bastante conhecido no ramo da computação. Neste formato, cada pixel da imagem

possui uma quantidade da cor vermelha, uma quantidade da cor verde e uma quan-

tidade da cor azul, a soma destes três valores representam a cor do pixel.

O formato YUV codifica uma imagem ou video levando em conta a percepção

humana. Ele permite uma redução da largura de banda de uma transmissão pois

utiliza somente 16 bits por pixel, então é muito útil para comprimir imagens, pois a perda é mascarada pela percepção humana, enquanto que o RGB possui o dobro de

tamanho por pixel e nem sempre faz diferença para nossos olhos. Na sigla YUV, o Y

representa a luminância de um pixel, ou seja, quantidade de luminosidade percebida pelo olho humano naquele pixel, enquanto que as siglas U e V representam dois

componentes diferentes de crominância, que é a forma como nossos olhos percebem as cores.

A figura 4.3 ilustra a imagem com os componentes separados.

29

4.1. Formatos

Casa do Código

Figura 4.3: Imagem YUV

O formato Bayer é bastante similar ao RGB, mas ele altera a imagem proporci-

onalmente à nossa percepção para cores, então o verde (que é a cor que mais per-cebemos) é mais levado em consideração do que o vermelho ou azul. As diferenças visuais entre os formatos RGB, YUV e Bayer são bem sutis, a figura 4.4 ilustra uma mesma imagem nos três formatos com a resolução máxima.

30

Casa do Código

Capítulo 4. Fluxo de Cores

Figura 4.4: Comparação entre formatos da Câmera RGB

O formato InfraRed ou infravermelho é bem diferente dos citados anteriormente.

Quando a câmera é habilitada com este formato, podemos visualizar a forma com

que o Kinect vê o ambiente. O resultado é uma imagem escura com diversos pontos luminosos, que representam os pontos infravermelhos que são lançados pelo emissor de luz infravermelho no ambiente.

4.2

Aplicação

Neste capítulo iremos criar uma aplicação um pouco mais complexa, que contará

com as funções mencionadas anteriormente: bater uma foto e exibir na aplicação a imagem (que será feito utilizando o fluxo de cores sob demanda), exibir na aplicação um o vídeo do que a câmera RGB está vendo (que será feito utilizando o evento) e criaremos uma opção para utilizar um filtro de escala cinza sobre a imagem.

Como você já deve estar acostumado criaremos uma nova aplicação WPF e no-

vamente iremos incluir as referências para nosso projeto auxiliar e para a SDK do Kinect. Nossa aplicação será construída por etapas primeiramente iremos fazer com que ela apenas bata foto sob demanda.

Criando o layout

O Layout desta aplicação será relativamente simples. Primeiro vamos dividir o

componente Grid em duas linhas, utilizando o Grid.RowDefinitions que já

mencionamos anteriormente. A linha inferior não deve receber um valor muito alto 31

4.2. Aplicação

Casa do Código

para sua altura (50 é suficiente), pois ela irá servir apenas para inserirmos nosso bo-tão que baterá a foto, todo o resto da altura da janela deve pertencer a linha superior, já que ela terá o componente que irá exibir a imagem de nossa foto. O código de sua tela deve ficar similar ao código a seguir.

<Window x:Class="SensorRGB.MainWindow"

xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"

xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"

Title="MainWindow" Height="350" Width="525">

<Grid>

<Grid.RowDefinitions>

<RowDefinition Height="*"/>

<RowDefinition Height="50"/>

</Grid.RowDefinitions>

<Button Content="Bater Foto"

Grid.Row="1" Margin="10,10"

Width="70" HorizontalAlignment="Left"

Click="Button_BaterFoto"/>

<Image Name="imagemCamera" />

</Grid>

</Window>

Utilizando um quadro sob demanda

Note que, no código anterior, já foi atribuído um evento para o bo-

tão que irá bater a foto, vamos então ao código.

Como padrão, após o

método

InitializeComponent da janela devemos inicializar o sensor de

nossa aplicação.

No caso desta aplicação, iremos criar um método cha-

mado

InicializarKinect(), pois além de fazermos a inicialização pa-

drão temos que inicializar o fluxo de cores.

Para isso, basta utilizarmos o

método

Enable() do objeto

ColorStream que pertence ao sensor, ele

pode receber por parâmetro o formato que a câmera irá utilizar (RGB, YUV,

Bayer ou IR). Caso você não informe nada ele assumirá o formato padrão (

ColorImageFormat.RgbResolution640x480Fps30).

O corpo do método criado deve ficar similar ao código a seguir.

private void InicializarKinect()

{

32

Casa do Código

Capítulo 4. Fluxo de Cores

kinect = InicializadorKinect.InicializarPrimeiroSensor(10);

kinect.ColorStream.Enable();

}

Ваша оценка очень важна

0
Шрифт
Фон

Помогите Вашим друзьям узнать о библиотеке