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.