Básico do OpenCV com Python – mostrar vídeo e webcam

A captura de vídeos ou de imagem da webcam é realizada de forma similar. Iniciarei explicando a captura da imagem da webcam. O tutorial também mostra uma manipulação simples da imagem capturada, fazendo algo baseado no tutorial visto no Básico do OpenCV com Python – mostrar imagem.

Esse tutorial pode estar desatualizado. Encontre a versão revisada em meu blog dedicado ao tema clicando aqui.

O código a seguir inicia com a importação da OpenCV (linha 1) e posterior instanciação de um objeto de captura de vídeo. Ao método VideoCapture() foi informado o valor zero, que corresponde a uma webcam. Se você tiver mais de uma webcam conectada, pode ser necessário testar qual é a sua webcam identificada pelo número zero e alterar o valor sequencialmente para encontrar a webcam que se deseja utilizar na captura. Com uma única webcam, o valor zero irá funcionar.

O que a webcam realiza é a captura de uma imagem (também chamado de frame de imagem) por cada instante de tempo. Por exemplo, se uma webcam adquire imagens a 20 FPS (frames por segundo), significa que a cada segundo 20 imagens são capturadas. A captura do vídeo então consiste em capturar essas imagens e ir mostrando cada uma dessas imagens. Sendo assim o código especifica uma estrutura de repetição com condição que gerará uma repetição infinita e a cada repetição é lido uma imagem da webcam (linha 6) e em seguida (linha 7) é mostrada a imagem capturada em uma janela de exibição (igual mostrar uma imagem lida, conforme visto no tutorial anterior).

As linhas 9, 10 e 11 são responsáveis por fazer para a repetição gerada pelo laço while, quando for pressionada a tecla “esc” do teclado. Para descobrir o código para outras teclas, utilize esse script.

Por fim, as duas últimas linhas são responsáveis por liberar a webcam e fechar todas as janelas abertas pelo script (no caso, apenas uma).

import cv2

captura = cv2.VideoCapture(0)

while(1):
    ret, frame = captura.read()
    cv2.imshow("Video", frame)
   
    k = cv2.waitKey(30) & 0xff
    if k == 27:
        break

captura.release()
cv2.destroyAllWindows()

Caso o objetivo seja exibir/utilizar um vídeo ao invés da captura da webcam, a única modificação está em informar o endereçamento do vídeo no lugar do identificador da webcam. Substituindo a linha 3 pela especificação a seguir faz com que esse vídeo seja utilizado (considerando que o vídeo está no mesmo diretório do script.

captura = cv2.VideoCapture("video.avi")

Utilizar um vídeo no lugar da webcam pode  ser útil para testes repetitivos, dispensando ficar realizando uma sequencia de testes.

Gravando o vídeo

* falta fazer

Modificando a captura

O código a seguir apenas adiciona 3 novas instruções (linhas 8, 9 e 10) a captura vista anteriormente. O que essas instruções fazem é pegar as cores do pixel na coordenada 200, 200 (linha 8) e depois utilizar essa cor para preencher um retângulo que é mostrado no canto superior esquerdo (através da instrução da linha 10). A linha 9 é responsável apenas por desenhar um pequeno quadrado vermelho de onde será obtida a cor, de forma apenas a orientar o usuário.

import cv2

captura = cv2.VideoCapture(0)

while(1):
    ret, frame = captura.read()

    (b, g, r) = frame[200, 200]
    frame[198:202, 198:202] = (0, 0, 255)
    frame[10:90, 10:90] = (b, g, r)
       
    cv2.imshow('frame',frame)
   
    k = cv2.waitKey(30) & 0xff
    if k == 27:
        break

captura.release()
cv2.destroyAllWindows()

Um frame capturado de um vídeo ou da webcam é simplesmente uma imagem e essa pode ser modificada livremente como qualquer imagem.

Share

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

Esse site utiliza o Akismet para reduzir spam. Aprenda como seus dados de comentários são processados.