Escolar Documentos
Profissional Documentos
Cultura Documentos
DE IMAGENS COM
PYTHON+OPENCV
Profª. Msc. Sahra Karolina
Instalações necessárias
◦ Phyton
◦ OpenCV
◦ Biblioteca Matplotlib
◦ IDE qualquer
23/09/2022
Python + OpenCV
◦ Para carregar uma imagem e exibi-la na tela:
◦ Uma imagem é uma matriz, nesse caso retornada pelo método imread e armazenada em memória através da
variável “img” conforme acima.
23/09/2022
Informações de largura e altura
◦ Para obter informações sobre largura e altura da imagem:
◦ Atributo shape (vetor com 3 elementos: largura, altura e quantidade de canais de cor, ex. RGB: 3)
◦ No caso de imagens em tons de cinza (manipulado via código: imread(... .jpg”, 0) o shape retorna apenas as
informações de altura e largura.
23/09/2022
Manipulação dos pixels da imagem
◦ A imagem é uma matriz de pixels onde cada pixel corresponde a uma posição nessa matriz e representa um valor de cor (0-
255), no caso de uma imagem em níveis de cinza, apenas um valor; no caso de uma imagem colorida, três valores.
C0 C1 C2 Cn C0 C1 C2 Cn
23/09/2022
Manipulação dos pixels da imagem
◦ Para percorrer essa matriz, utiliza-se dois for: para cada linha se percorre todas as colunas.
23/09/2022
Manipulação dos pixels da imagem
◦ Os três bytes que definem um pixel, no caso padrão do OpenCV, têm a sequência BGR, de Blue, Green, Red , ou seja, azul,
verde, vermelho.
◦ Para todos os pixels receberem a cor azul (255,0,0):
23/09/2022
Acessando a posição de um pixel
◦ A documentação do OpenCV recomenda acessar a posição de um pixel por
meio dos métodos item() para se acessar uma coordenada de cor e itemset()
para setar um novo valor de cor.
◦ Itemset()
◦ O método itemset((y,x,indice),valor) tem como parâmetros a coordenada y e a coordenada x
do pixel, um indice que pode ser 0 (zero) para a componente azul, 1 (um) para a
componente verde e 2(dois) para a componente vermelha.
◦ Por exemplo, itemset(10,20,0),255) irá atribuir ao pixel de coordenadas (20,10) um máximo
de cor azul.
23/09/2022
Acessando a posição de um pixel
23/09/2022
Acessando a posição de um pixel
◦ Acessar uma área específica da imagem a partir da posição de um pixel:
23/09/2022
Histograma de uma imagem
◦ Como visto, o histograma de uma imagem é a quantidade de pixels por níveis de cinza.
◦ Para implementar em Python com Opencv:
◦ A biblioteca “matplotlib” do python permite montar facilmente um histograma, para imprimir na tela
ou salvar como um arquivo de imagem. Ele é chamado pelo método “hist“, que recebe os dados como
entrada e outros parâmetros:
◦ ravel(): tranforma a matriz (2 dimensões) em um vetor (1 dimensão);
◦ quantidade de bins: quanto menor o valor, cada ponto do eixo x agrupa uma quantidade de tons,
recomenda-se 256 para garantir que aja 1 bin por tom de cinza;
◦ Intervalo: de qual ponto até qual ponto quer se representar no histograma (mínimo: 0 até máximo: 256);
23/09/2022
Histograma de uma imagem
23/09/2022
Histograma de uma imagem
◦ O eixo X do gráfico normalmente possui uma distribuição de 0 a 255 que demonstra o valor (intensidade) do pixel e no eixo Y
é plotada a quantidade de pixels daquela intensidade.
23/09/2022
Histograma de uma imagem colorida
◦ Além do histograma da imagem em tons de cinza é possível plotar um histograma da imagem colorida.
Neste caso teremos três linhas, uma para cada canal.
◦ 1 histograma para cada canal
◦ Construir cada histograma com auxilio do OpenCV, depois utilizar matplotlib para juntá-los:
◦ Parâmetros da função calcHist():
◦ imagem: Imagem a ser construído seu histograma
◦ i: Identificador no histograma naquela iteração (0, 1, 2)
◦ máscara: região específica para construção do histograma (usar none caso seja imagem inteira)
◦ quantidade de bins
◦ Intervalo de qual tom inicia até qual tom finaliza.
◦ plt.plot: constrói o histograma
◦ plt.xlim: limites em relação a x do histograma (geralmente mesmo intervalo 0-256)
23/09/2022
Histograma de uma imagem colorida
23/09/2022
Histograma de uma imagem colorida
23/09/2022
Limiarização
23/09/2022
Limiarização
23/09/2022
Limiarização
◦ O resultado de cores neste exemplo é influência da matplotlib.
23/09/2022
Limiarização adaptativa (média)
23/09/2022
Limiarização adaptativa (média)
23/09/2022
Limiarização adaptativa (gaussiana)
23/09/2022
Limiarização adaptativa (gaussiana)
23/09/2022
Média x Gaussiana
23/09/2022
PDI: MANIPULAÇÃO
DE IMAGENS COM
PYTHON+OPENCV
Profª. Msc. Sahra Karolina