Índice:

Detecção de cor simples usando OpenCV: 6 etapas
Detecção de cor simples usando OpenCV: 6 etapas

Vídeo: Detecção de cor simples usando OpenCV: 6 etapas

Vídeo: Detecção de cor simples usando OpenCV: 6 etapas
Vídeo: Identificando Cores com Opencv | Reproduzindo Cores com LED's Utilizando Arduino 2024, Junho
Anonim
Detecção de cor simples usando OpenCV
Detecção de cor simples usando OpenCV

Oi! Hoje vou mostrar um método simples de detectar uma cor de um vídeo ao vivo usando OpenCV e python.

Basicamente irei apenas testar se a cor necessária está presente no quadro de fundo ou não e usando módulos OpenCV irei mascarar essa região e exibir simultaneamente o quadro.

Etapa 1: os arquivos de cabeçalho

Os Arquivos de Cabeçalho
Os Arquivos de Cabeçalho

Agora aqui eu usei dois arquivos de cabeçalho, ou seja, cv2 e NumPy. Basicamente, cv2 é a biblioteca OpenCV que carrega todos os arquivos c ++ que são importantes ao usar os comandos nos códigos (ela contém todas as definições).

E Numpy é uma biblioteca python essencial para armazenar um array multidimensional. Estaremos usando para armazenar nossas coordenadas de gama de cores.

E numpy as np basicamente ajuda nosso código a encurtar um pouco usando np todas as vezes em vez de numpy.

Etapa 2: captura do vídeo

Capturando o Vídeo
Capturando o Vídeo

Isso é muito simples ao usar o python. Aqui só precisamos ligar o gravador de vídeo para que ele possa começar a gravar os quadros.

Agora o valor dentro do VideoCapture indica a câmera, no meu caso a câmera está conectada ao meu laptop, então 0.

Você pode ir de forma semelhante a 1 para a câmera secundária e assim por diante. VideoCapture cria o objeto para ele.

Etapa 3: captura do quadro e definição da cor

Capturando Quadro e Definindo Cor
Capturando Quadro e Definindo Cor

Agora aqui temos que fazer algo para que possamos capturar o quadro instantâneo do vídeo que nos ajudará a extrair a imagem e podemos trabalhar nisso de acordo com os requisitos.

O loop "while" nos ajudará a executar o loop até o tempo necessário. Agora "_, frame = cap.read ()" é usado para verificar a validade do Frame capturado e o armazena. "cap.read () é uma variável booleana e retorna true se o quadro for lido corretamente e se você não obtiver nenhum quadro, ele não mostrará nenhum erro, você simplesmente obterá Nenhum.

Agora a linha 11 e a linha 12 basicamente definem a gama de cores que precisamos detectar. Para isso, usei a cor azul.

Você pode prosseguir com qualquer cor, basta digitar os valores BGR para aquela cor específica. É melhor definir duas matrizes usando matrizes numpy, pois a detecção de uma cor específica no mundo real não servirá ao nosso propósito, em vez disso, definiremos uma faixa de cor azul para que seja detectada dentro da faixa.

Para isso, defini duas variáveis que armazenam os valores de BGR inferiores e os valores de BGR superiores.

Etapa 4: mascaramento e extração

Mascarando e Extraindo
Mascarando e Extraindo

Agora vem a tarefa principal de mascarar a moldura e extrair a cor da moldura. Usei os comandos predefinidos presentes na biblioteca do OpenCV para fazer o mascaramento. Basicamente, mascarar é o processo de remover alguma parte do quadro, ou seja, removeremos os pixels cujos valores de BGR de cor que não estão na faixa de cores definida e isso é feito por cv2.inRange. Posteriormente, aplicamos o intervalo de cores à imagem mascarada dependendo dos valores dos pixels e, para isso, usaremos cv2.bitwise_and, ele simplesmente atribuirá as cores à região mascarada dependendo dos valores da máscara e do intervalo de cores.

Link para cv2. bitwise_and:

Etapa 5: finalmente exibindo

Finalmente exibindo!
Finalmente exibindo!

Aqui, usei o cv2.imshow () básico para exibir cada quadro como uma imagem. Como tenho os dados do quadro armazenados em variáveis, posso recuperá-los em imshow (). Aqui, exibi todos os três quadros, original, mascarado e colorido.

Agora temos que sair do loop while. Para isso, podemos simplesmente implementar o cv2.wait. Key (). Basicamente, ele informa o tempo de espera antes de responder. Portanto, se você passar 0, ele aguardará infinitamente e 0xFF diz que a arquitetura é de 64 bits. "ord ()" especifica o caractere que, quando pressionado, executará o comando break no bloco if e sairá do loop.

Então cap.release () fecha o gravador de vídeo e cv2.destroyAllWindows () fecha todas as janelas abertas.

Se você tiver qualquer problema, por favor me avise.

Link para o código-fonte:

Recomendado: