P.D.I. em COLAB


Processamento digital de imagens
Imagens em Google Python/Colab


Manipulando matrizes e imagens

No módulo anterior usamos uns vetores. Podemos fazer o mesmo com matrizes, tanto com numpy como com matplotlib. Uma imagem digital é uma matriz, então, isto se torna atrativo para nós.

Vamos criar uma matriz 10x10 cheia de zeros e alterar o valor de algumas células, em um novo programa import numpy as np
import matplotlib.pylab as plt
tam=10 # definir o tamanho da grade
X=np.zeros([tam, tam],dtype = float)
X[2,2]=255
X[5,5]=255
X[4, 8]=255
print(X)
# mostrar como imagem
plt.imshow(X)
plt.show()

agora você

Agora, você pode desenhar uma carinha sorridente e mostrar como imagem?

Pode começar criando uma matriz vazia.

Depois, altere o valor de alguns pixels para fazer a "arte"

PARTE 3: ler uma imagem da WEB

Aqui voce aprende:

  1. ler uma imagem de um endereço da WEB
  2. recuperar o número de bandas, linhas e colunas da imagem (seutamanho)
  3. combinar as bandas RGB originais para produzir uma imagem com uma única banda igual à média dos valores dos pixels. (muda de colorida a gray)

como sempre, importe as bibliotecas básicas. A função io da biblioteca skimage permite ler uma imagem da WEB, especificando o endereço. Você pode tentar depois com outras imagens. Agora, se concentre neste exemplo. from skimage import io
import cv2 as cv
import numpy as np
from google.colab.patches import cv2_imshow

Ler a imagem
Após ler a imagem, podemos ler seu tamanho usando o comando SHAPE.
Finalmente, podemos visualizar a imagem usando o comando imshow da biblioteca CV2. # abrir imagem
url="https://docs.ufpr.br/~centeno/m_pdi/exepy/imagens/crops_RGB.tif"
I = io.imread(url)
nl,nc, nb= I.shape
print(nl, nc, 'numero de bandas',nb)
cv2_imshow(I)

Agora, criamos uma imagem vazia com o mesmo tamanho da anteriormente lida, porém com apenas uma banda.

OBS: como para calcular a media devemos somar os valores dos pixels em três bandas, a soma pode eventualmente ser maior que 255 (o máximo para 8 bits UINT8) por isso, vamos trabalhar com a imagem em float.

calcular a média de cada pixel considerando as três bandas: media =1/3 *( I[:,:,1]+ I[:,:,2]+ I[:,:,2]) Para calcular a imagem em preto e branco: vamos varrer a imagem, linha por linha, coluna por coluna e calcular a média... S=np.zeros((nl,nc),dtype = np.uint8 ) # criamos uma variavel vazia em uint8 for i in range(nl):
   for j in range( nc):
     b1=float(I[i,j,0])
     b2=float(I[i,j,1])
     b3=float(I[i,j,2])
     S[i,j]= np.uint8 ( (b1+b2+b3)/3 )
cv2_imshow(S)

parte 4: usar o drive

Finalmente, você pode usar o Google Drive para ler e armazenar imagens. para isto, crie uma pasta "fotos" no seu google drive e armazene nela uma imagem colorida de sua preferência.

Para ler a imagem, deve usar uma biblioteca específica para ler e salvar no drive. A biblioteca google.colab DRIVE.

Depois, monte o drive como uma pasta, com MOUNT import numpy as np
import matplotlib.pylab as plt
from google.colab.patches import cv2_imshow # para mostrar a imagem
from skimage import io
    
# para salvar no drive
from google.colab import drive
    
drive.mount('/content/gdrive')
O programa pode ler imagem da pasta "images" ou listar seu conteúdo... !ls "/content/drive/My Drive/images" # lista conteúdo de pasta
nome="/content/drive/My Drive/images/igreja.jpg" # le uma das imagens com nome especificado. Cuidado,com o uso de maiúsculas.
imgRGB = cv2.imread(nome) # ler imagem deste endereço
# salvar como nova imagem
io.imsave('/content/gdrive/My Drive/fotos/saida.tif', imgRGB)

DESAFIO

Leia a imagem "igreja.jpg" do seu drive e crie um "x" nela, traçãdo duas linhas pretas nas diagonais.

.

e poderia traçar duas linhas brancas?


sair