top of page

Python e Técnica de Keying

  • Foto do escritor: Vinicius Goia
    Vinicius Goia
  • 4 de set. de 2023
  • 3 min de leitura

Imagem de frimufilms no Freepik

Adicionar efeitos aos nossos vídeos se tornou uma atividade tão simples hoje em dia que mal paramos para analisar como todo o processo é realizado. Aplicativos de redes sociais, aplicativos de reuniões, filmes, séries, imagens. São incontáveis os exemplos. Mas tudo gira em torno de um conceito: processamento de imagens digitais. Afinal, um vídeo nada mais é que uma sequência de imagens exibidas por segundo, o famoso FPS (frames per second). O intuito deste artigo é apresentar alguns conceitos de processamento de imagens e exemplificar com uma Técnica de Keying em um vídeo.


Conceitos de Processamento de Imagens


Processamento de Imagens possui, basicamente, duas aplicações principais: adicionar informações para interpretação humana ou extrair informações para algum tipo de processamento ou armazenamento. No caso do Keying, entramos na primeira aplicação, onde incorporamos certos elementos não existentes em nosso vídeo ou imagem através de substituição de pixels.


Mas afinal, o que são pixels? Pixels são elementos finitos que compõem uma imagem e podem ser representados por f(x,y), onde x e y são coordenadas espaciais e f é intensidade. Em uma imagem RGB de 8 bits, a intensidade de um pixel pode variar de 0 a 255, nas camadas de cores Red (Vermellho), Green (Verde) e Blue (Azul). Desta forma, uma imagem digital pode ser representada pela seguinte matriz:



Onde A pode ser interpretada como uma camada de cor e cada elemento interno à matriz é um pixel em sua posição espacial e específica intensidade.


Explanado isso, podemos adentrar e exemplificar uma técnica de Keying usando Python.


Keying com Python


Como comentado anteriormente, a Técnica de Keying consiste na substituição de pixels de certa região de uma imagem por pixels de uma outra imagem. Um exemplo simplista seria a substituição do fundo de uma imagem, como no exemplo abaixo:


Imagem com fundo verde

Imagem à ser adicionada

Combinação das imagens

A utilização de uma cor uniforme ao fundo é uma maneira de facilitar a captura da tonalidade para substituição. Quando se tem uma coloração não tão uniforme, a substituição dos pixels se torna uma tarefa mais trabalhosa.


Para a aplicação a ser descrita a seguir, utilizou-se a gravação de um vídeo em uma câmera Canon T3i (o qual possui o fundo verde), o trecho de um clipe de uma música e o VS Code como IDE para programação. As únicas bibliotecas Python utilizadas foram Numpy e OpenCV. É de extrema importância se atentar aos frames e ao tamanho da imagem dos vídeos utilizados. Eles devem possuir os mesmos valores para que a correspondência se aplique.


O processo inicia-se no carregamento dos dois vídeos em variáveis distintas. Nesse momento também definimos a variável final de saída como sendo um vídeo no formato MP4, 23.98 fps e tamanho de 1080x1920. Logo após, entramos em um looping onde inicia-se a leitura de cada frame, de cada vídeo. Também definimos um intervalo de tonalidade para o nosso fundo verde trabalhado, com valores mínimos e máximos. Com isso, conseguimos criar uma máscara com a região exata onde o fundo verde está localizado em um dos vídeos. Com essa informação, transportamos essa demarcação de região para outro vídeo, extraímos os pixels que correspondem a seleção, criamos uma máscara com a seleção inversa e aplicamos ao primeiro vídeo. Assim temos o vídeo da Canon só com a seleção do nosso objeto principal e o vídeo do clipe só com a região correspondente à coloração verde. As operações são executadas bit a bit, por isso os tamanhos e frames dos vídeos devem ter correspondência. Ao final, unimos as duas mídias e salvamos em algum local.


Como a operação é voltada ao processamento de imagens e visão computacional, qualquer áudio nos vídeos será descartado. Segue o resultado abaixo:




Conclusão


O vídeo acima foi gravado em uma residência onde a parede possuía a cor verde. Sem nenhuma iluminação complementar para tentar equalizar as tonalidades presentes, a aplicação realizou a substituição dos pixels. Em alguns momentos observa-se pequenas interferências e nas bordas é visível a separação das camadas. Com alguns cuidados com o cenário e uma implementação de código, melhores resultados podem ser alcançados. Lembrando que as cores verde e azul são mais utilizadas no processo de Keying devido as suas características não chocarem com tonalidades de pele, gerando maior contraste. Essa técnica pode ser aplicada em projetos mais complexos, onde elementos são adicionados à grandes cenários, criando uma total imersão.


Caso tenha interesse no código utilizado no vídeo acima, entre em contato.

Comments


©2023 by Natural Engines. Flowing Knowledge.

bottom of page