Você está na página 1de 25

PDI: MANIPULAÇÃO

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

L0 R, G, B R, G, B R, G, B R, G, B L0 y=0, x=0 y=0, x=1 ... y=0, x=n

L1 R, G, B R, G, B R, G, B R, G, B L1 y=1, x=0 y=1, x=1 ... y=1, x=n

R, G, B R, G, B R, G, B R, G, B ... ... ... ...

Ln R, G, B R, G, B R, G, B R, G, B Ln y=n, x=0 y=n, x=1 ... y=n, x=n

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):

• Método saveImage salva uma


cópia da imagem modificada.

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

◦ O método de limiarização por equilíbrio do histograma, é um


método muito simples utilizado para fazer a limiarização de uma
imagem ou, por outras palavras, transformar uma imagem definida
a níveis de cinza numa imagem definida a preto e branco.

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

Você também pode gostar