opencv

Visão computacional, o básico

Visão computacional, o básico
Opencv (Open Source Computer Vision Library) é um módulo Python usado para visão computacional. OpenCV é um módulo de código aberto gratuito que contém centenas de algoritmos para realizar várias tarefas. Qualquer coisa, desde o reconhecimento de rosto à detecção de movimento, pode ser feito usando o OpenCV. No entanto, neste guia, veremos os fundamentos do OpenCV.

Primeiro, vamos instalar o OpenCV:

pip3 install opencv-python

Ler e mostrar imagens

A primeira coisa que precisamos aprender é ler e escrever imagens. Ler um arquivo de imagem, inserir o caminho completo para o arquivo ou o nome do arquivo (se o arquivo estiver na pasta python) e adicionar um sinalizador é feito usando cv2.eu estou lendo(). A bandeira pode assumir o valor de 1 (para uma imagem colorida), 0 (para tons de cinza) ou -1 (para imagem colorida com canais). Pode-se usar o cv2.função imshow () para mostrar a imagem; aqui, dois argumentos são passados ​​- um nome para a imagem e a imagem para mostrar. Em seguida, usamos o cv2.função waitKey () para esperar por uma entrada do teclado; um 0 para o cv2.A função waitKey (0) implica um tempo de espera permanente. Por outro lado, o cv2.A função destroyAllWindows () irá fechar as janelas.

Isso lerá e abrirá uma imagem e a manterá aberta até você fechá-la:

import cv2
imagem = cv2.imread ('LinuxLogo.jpg ', 1)
cv2.imshow ('imagem', imagem)
cv2.waitKey (0)
cv2.destroyAllWindows ()

Escrever imagens

Usamos o cv2.função imwrite () para salvar uma imagem. Esta função tem dois parâmetros - um nome para salvar a imagem e a imagem que você deseja salvar.

import cv2
imagem = cv2.imread ('identificar.jpg ', -1)
cv2.imwrite ('save_image.png ', imagem)

Capturar vídeo da webcam

Para capturar vídeos, começamos inicializando o cv2.Função VideoCapture (). Em seguida, usamos um loop “while” para continuar a capturar o vídeo. Enquanto o usuário não pressiona a tecla sair, podemos ler os quadros e mostrá-los usando read () e cv2.função imshow (). Em seguida, colocamos uma chave de “pausa” para sair do loop; neste caso, o número 27 é a tecla ESC. Se o usuário pressionar a tecla ESC, ele sai do loop. Uma vez fora do loop, é necessário liberar a captura.

importar numpy como np
import cv2
captura = cv2.VideoCapture (0)
enquanto (verdadeiro):
ret, quadro = captura.leitura()
cv2.imshow ('frame', frame)
se cv2.waitKey (1) & 0xFF == 27:
pausa
capturar.liberação()
cv2.destroyAllWindows ()

Reproduzindo um arquivo de vídeo

Reproduzir um arquivo de vídeo é como capturar um vídeo de uma webcam. Para fazer isso, o cv2.A função VideoCapture () é usada; o nome do arquivo de vídeo que você deseja reproduzir é então adicionado à função. O loop “while” é usado novamente, e a tecla de saída, neste caso, é a tecla “s” no teclado. Isso abrirá e reproduzirá o arquivo de vídeo e o fechará quando o usuário pressionar a tecla “s”.

importar numpy como np
import cv2
captura = cv2.VideoCapture ("Megamind.avi ")
enquanto (verdadeiro):
ret, quadro = captura.leitura()
cv2.imshow ('frame', frame)
se cv2.waitKey (1) & 0xFF == ord ("s"):
pausa
capturar.liberação()
cv2.destroyAllWindows ()

Salvando um arquivo de vídeo

Salvar um arquivo de vídeo requer um pouco mais de trabalho. O cv2.A função VideoWriter () leva 4 parâmetros no total - o nome do arquivo de saída, o código FourCC, o número de quadros por segundo e o tamanho do quadro. Além disso, deve-se especificar o código FourCC, que é o codec de vídeo usando o cv2.Função VideoWriter_fourcc (). Usando a captura.isOpened (), lemos o quadro e escrevemos o quadro de saída. Também podemos mostrar os frames usando o cv2.função imshow (). Então, usamos cv2.waitKey (1) & 0xFF == ord ('s') para definir uma chave de saída. Neste caso, se o usuário pressionar a tecla “s”, ele sairá do loop e então liberará a captura e a saída e fechará as janelas.

importar numpy como np
import cv2
captura = cv2.VideoCapture (0)
fourcc = cv2.VideoWriter_fourcc (* 'XVID')
output = cv2.VideoWriter ('output.avi ', fourcc, 30.0, (640.480))
enquanto (captura.está aberto()):
ret, quadro = captura.leitura()
resultado.escrever (quadro)
cv2.imshow ('frame', frame)
se cv2.waitKey (1) & 0xFF == ord ('s'):
pausa
capturar.liberação()
resultado.liberação()
cv2.destroyAllWindows ()

Desenho de linhas, círculos, retângulos e textos

A primeira coisa que aprenderemos a traçar é uma linha. Para traçar uma linha, simplesmente usamos o cv2.função line (). A função leva 5 argumentos - o vídeo de origem, o ponto inicial, o ponto final, a cor e a espessura da linha. No caso a seguir, decidimos desenhar uma borda retangular (composta por 4 linhas):

import cv2
captura = cv2.VideoCapture ('vtest.avi ')
enquanto verdadeiro:
ret, quadro = captura.leitura()
largura = int (captura.obter (3))
altura = int (captura.obter (4))
linha1 = cv2.linha (quadro, (0,0), (0, altura), (255, 255, 255), 10)
linha2 = cv2.linha (linha1, (0, 0), (largura, 0), (255, 255, 255), 10)
linha3 = cv2.linha (linha2, (0, altura), (largura, altura), (255, 255, 255), 10)
linha4 = cv2.linha (linha3, (largura, 0), (largura, altura), (255, 255, 255), 10)
cv2.imshow ('frame', linha 4)
se cv2.waitKey (40) == ord ('q'):
pausa
capturar.liberação()
cv2.destroyAllWindows ()

A seguir, desenharemos um círculo e um retângulo no vídeo. Para desenhar um retângulo, usamos o cv2.função rectangle (), que recebe 5 argumentos, muito parecido com a linha. Para desenhar um círculo, usamos a função cv2.circle (), que também leva 5 argumentos - o vídeo de origem, o ponto central, o raio, a cor e a espessura.

import cv2
captura = cv2.VideoCapture ('vtest.avi ')
enquanto verdadeiro:
ret, quadro = captura.leitura()
largura = int (captura.obter (3))
altura = int (captura.obter (4))
retângulo = cv2.retângulo (quadro, (150, 15), (650, 550), (0,0,0), 11)
cv2.círculo (retângulo, (250, 250), 60, (0,0,0), 11)
cv2.imshow ('frame', frame)
se cv2.waitKey (40) == ord ('q'):
pausa
capturar.liberação()
cv2.destroyAllWindows ()

Agora, vamos adicionar algum texto ao vídeo que temos. Para fazer isso, precisamos especificar uma fonte; aqui, escolhemos cv2.FONT_HERSHEY_SIMPLEX. Uma vez que a fonte é selecionada, podemos usar a função cv2.putText () para fazer o resto. Cv2.putText () leva 8 argumentos - o vídeo de origem, o texto que você deseja escrever, a posição onde você deseja, a fonte, a ampliação, a cor, a espessura e cv2.LINE_AA (o que torna tudo mais bonito).

import cv2
captura = cv2.VideoCapture ('vtest.avi ')
enquanto verdadeiro:
ret, quadro = captura.leitura()
largura = int (captura.obter (3))
altura = int (captura.obter (4))
font = cv2.FONT_HERSHEY_SIMPLEX
imagem = cv2.putText (frame, "VTEST.AVI ", (200, 200), fonte, 4, (0,0,0), 5, cv2.LINE_AA)
cv2.imshow ('frame', imagem)
se cv2.waitKey (40) == ord ('q'):
pausa
capturar.liberação()
cv2.destroyAllWindows ()

O OpenCV é capaz de muitas coisas grandes onde se deve começar em algum lugar. Pode ser aprender a criar e salvar imagens e vídeos. Neste tutorial, aprendemos a fazer o básico da visão computacional.

Happy Coding!

Melhores emuladores de console de jogo para Linux
Este artigo irá listar software de emulação de console de jogo popular disponível para Linux. A emulação é uma camada de compatibilidade de software q...
Melhores distros Linux para jogos em 2021
O sistema operacional Linux percorreu um longo caminho desde sua aparência original, simples e baseada em servidor. Este sistema operacional melhorou ...
Como capturar e transmitir sua sessão de jogo no Linux
No passado, jogar era considerado apenas um hobby, mas com o tempo a indústria de jogos viu um grande crescimento em termos de tecnologia e número de ...