Chroma Key com OpenCV
Nossa tarefa consiste em substituir o fundo verde do vídeo_01 pelo fundo presente no vídeo_02.
O código completo do projeto estará disponivel aqui.
Aqui está uma explicação passo a passo do código:
- Importa as bibliotecas necessárias:
cv2
: Biblioteca OpenCV para processamento de imagens.numpy
(abreviado comonp
): Biblioteca para manipulação de arrays e cálculos numéricos.
2. Carrega dois vídeos:
cap_webcam
: Lê o vídeo da webcam ou de um arquivo de vídeo, dependendo da linha descomentada.cap_fundo
: Lê um arquivo de vídeo que será usado como fundo.
3. Entra em um loop principal:
- Lê um quadro (frame) de cada vídeo usando as funções
cap_webcam.read()
ecap_fundo.read()
. - Verifica se os vídeos terminaram. Se um dos vídeos chegar ao fim, o loop é encerrado.
4. Define os limites de cor verde em formato RGB:
lower_green
eupper_green
definem os valores mínimos e máximos para a cor verde. Os valores fornecidos neste exemplo são uma aproximação dos limites para a cor verde.
5. Cria uma máscara para identificar os pixels na faixa de cor verde:
mask = cv2.inRange(frame_webcam, lower_green, upper_green)
cria uma máscara binária onde os pixels na faixa de cor verde são representados por 255 (branco) e os pixels fora da faixa são representados por 0 (preto).
6. Extrai os pixels do fundo verde usando a máscara:
fundo_background = cv2.bitwise_and(frame_fundo, frame_fundo, mask=mask)
aplica a máscara para extrair os pixels do quadro do fundo que correspondem à cor verde do quadro da webcam.
Este é o resultado da nossa primeira mascará:
7. Inverte a máscara para obter os pixels que não estão na faixa de cor verde:
mask_inv = np.invert(mask)
inverte a máscara para que os pixels que não estão na faixa de cor verde sejam representados por 255 (branco) e os pixels verdes sejam representados por 0 (preto).
8. Extrai os pixels da webcam que não são verdes:
webcam_foreground = cv2.bitwise_and(frame_webcam, frame_webcam, mask=mask_inv)
aplica a máscara invertida para extrair os pixels da webcam que não são verdes.
9. Combina os pixels extraídos do fundo com os pixels da webcam:
result = cv2.addWeighted(fundo_background, 1, webcam_foreground, 1, 0)
combina os dois conjuntos de pixels usando uma operação de adição ponderada para criar uma imagem final em que o fundo verde é substituído pelo conteúdo da webcam.
10. Mostra o resultado em uma janela:
cv2.imshow("Resultado", result)
exibe o resultado da substituição de fundo em uma janela com o título “Resultado”.
11. Verifica se a tecla ‘q’ é pressionada para encerrar o programa:
if cv2.waitKey(1) & 0xFF == ord('q'):
verifica se a tecla ‘q’ foi pressionada. Se sim, o loop é encerrado e o programa é finalizado.
Ao executar o programa, o resultado obtido é um vídeo que combina o conteúdo do vídeo01 com o fundo do vídeo02.
Se você gostou do artigo e gostaria de me apoiar, certifique-se de:
👏 Palmas para a artigo (50 palmas) para ajudar este artigo a ser apresentado para mais pessoas.
🔔 Siga-me: LinkedIn
📧e-mail