Lab02 - Seguimentação por pixel
Objetivos da aula:
- Filtro negativo de imagem
- Recorte da imagem
- Seguimentação por pixel
%matplotlib inline
# Importando a biblioteca OpenCV
import cv2
#import a biblioteca Numpy
import numpy as np
from matplotlib import pyplot as plt
print ("OpenCV Versão : %s " % cv2.__version__)
OpenCV Versão : 4.6.0
!wget "https://raw.githubusercontent.com/arnaldojr/cognitivecomputing/master/material/aulas/PDI/lab02/cogumelo.png" /content
!wget "https://raw.githubusercontent.com/arnaldojr/cognitivecomputing/master/material/aulas/PDI/lab02/droneinvertido.jpg" /content
!wget "https://raw.githubusercontent.com/arnaldojr/cognitivecomputing/master/material/aulas/PDI/lab02/drone.jpg" /content
!wget "https://raw.githubusercontent.com/arnaldojr/cognitivecomputing/master/material/aulas/PDI/lab02/droneinvertido.jpg" /content
!wget "https://raw.githubusercontent.com/arnaldojr/cognitivecomputing/master/material/aulas/PDI/lab02/goku.jpg" /content
!wget "https://raw.githubusercontent.com/arnaldojr/cognitivecomputing/master/material/aulas/PDI/lab02/gokuinvertido.jpg" /content
!wget "https://raw.githubusercontent.com/arnaldojr/cognitivecomputing/master/material/aulas/PDI/lab02/cogumelo.png" /content
--2023-02-10 19:36:13-- https://raw.githubusercontent.com/arnaldojr/cognitivecomputing/master/material/aulas/lab02/cogumelo.png Resolving raw.githubusercontent.com (raw.githubusercontent.com)... 185.199.108.133, 185.199.111.133, 185.199.109.133, ... Connecting to raw.githubusercontent.com (raw.githubusercontent.com)|185.199.108.133|:443... connected. HTTP request sent, awaiting response... 200 OK Length: 48478 (47K) [image/png] Saving to: ‘cogumelo.png.2’ cogumelo.png.2 0%[ ] 0 --.-KB/s cogumelo.png.2 100%[===================>] 47.34K --.-KB/s in 0.01s 2023-02-10 19:36:13 (4.58 MB/s) - ‘cogumelo.png.2’ saved [48478/48478] /content: Scheme missing. FINISHED --2023-02-10 19:36:13-- Total wall clock time: 0.06s Downloaded: 1 files, 47K in 0.01s (4.58 MB/s) --2023-02-10 19:36:13-- https://raw.githubusercontent.com/arnaldojr/cognitivecomputing/master/material/aulas/lab02/droneinvertido.jpg Resolving raw.githubusercontent.com (raw.githubusercontent.com)... 185.199.111.133, 185.199.109.133, 185.199.110.133, ... Connecting to raw.githubusercontent.com (raw.githubusercontent.com)|185.199.111.133|:443... connected. HTTP request sent, awaiting response... 200 OK Length: 52937 (52K) [image/jpeg] Saving to: ‘droneinvertido.jpg.2’ droneinvertido.jpg. 100%[===================>] 51.70K --.-KB/s in 0.01s 2023-02-10 19:36:13 (4.78 MB/s) - ‘droneinvertido.jpg.2’ saved [52937/52937] /content: Scheme missing. FINISHED --2023-02-10 19:36:13-- Total wall clock time: 0.06s Downloaded: 1 files, 52K in 0.01s (4.78 MB/s) --2023-02-10 19:36:13-- https://raw.githubusercontent.com/arnaldojr/cognitivecomputing/master/material/aulas/lab02/drone.jpg Resolving raw.githubusercontent.com (raw.githubusercontent.com)... 185.199.108.133, 185.199.109.133, 185.199.110.133, ... Connecting to raw.githubusercontent.com (raw.githubusercontent.com)|185.199.108.133|:443... connected. HTTP request sent, awaiting response... 200 OK Length: 37505 (37K) [image/jpeg] Saving to: ‘drone.jpg.1’ drone.jpg.1 100%[===================>] 36.63K --.-KB/s in 0.003s 2023-02-10 19:36:13 (11.0 MB/s) - ‘drone.jpg.1’ saved [37505/37505] /content: Scheme missing. FINISHED --2023-02-10 19:36:13-- Total wall clock time: 0.06s Downloaded: 1 files, 37K in 0.003s (11.0 MB/s) --2023-02-10 19:36:13-- https://raw.githubusercontent.com/arnaldojr/cognitivecomputing/master/material/aulas/lab02/droneinvertido.jpg Resolving raw.githubusercontent.com (raw.githubusercontent.com)... 185.199.108.133, 185.199.109.133, 185.199.110.133, ... Connecting to raw.githubusercontent.com (raw.githubusercontent.com)|185.199.108.133|:443... connected. HTTP request sent, awaiting response... 200 OK Length: 52937 (52K) [image/jpeg] Saving to: ‘droneinvertido.jpg.3’ droneinvertido.jpg. 100%[===================>] 51.70K --.-KB/s in 0.01s 2023-02-10 19:36:13 (4.84 MB/s) - ‘droneinvertido.jpg.3’ saved [52937/52937] /content: Scheme missing. FINISHED --2023-02-10 19:36:13-- Total wall clock time: 0.06s Downloaded: 1 files, 52K in 0.01s (4.84 MB/s) --2023-02-10 19:36:13-- https://raw.githubusercontent.com/arnaldojr/cognitivecomputing/master/material/aulas/lab02/goku.jpg Resolving raw.githubusercontent.com (raw.githubusercontent.com)... 185.199.108.133, 185.199.109.133, 185.199.110.133, ... Connecting to raw.githubusercontent.com (raw.githubusercontent.com)|185.199.108.133|:443... connected. HTTP request sent, awaiting response... 200 OK Length: 113004 (110K) [image/jpeg] Saving to: ‘goku.jpg.1’ goku.jpg.1 100%[===================>] 110.36K --.-KB/s in 0.02s 2023-02-10 19:36:13 (5.17 MB/s) - ‘goku.jpg.1’ saved [113004/113004] /content: Scheme missing. FINISHED --2023-02-10 19:36:13-- Total wall clock time: 0.07s Downloaded: 1 files, 110K in 0.02s (5.17 MB/s) --2023-02-10 19:36:14-- https://raw.githubusercontent.com/arnaldojr/cognitivecomputing/master/material/aulas/lab02/gokuinvertido.jpg Resolving raw.githubusercontent.com (raw.githubusercontent.com)... 185.199.108.133, 185.199.109.133, 185.199.110.133, ... Connecting to raw.githubusercontent.com (raw.githubusercontent.com)|185.199.108.133|:443... connected. HTTP request sent, awaiting response... 200 OK Length: 154233 (151K) [image/jpeg] Saving to: ‘gokuinvertido.jpg.1’ gokuinvertido.jpg.1 100%[===================>] 150.62K --.-KB/s in 0.02s 2023-02-10 19:36:14 (6.56 MB/s) - ‘gokuinvertido.jpg.1’ saved [154233/154233] /content: Scheme missing. FINISHED --2023-02-10 19:36:14-- Total wall clock time: 0.07s Downloaded: 1 files, 151K in 0.02s (6.56 MB/s) --2023-02-10 19:36:14-- https://raw.githubusercontent.com/arnaldojr/cognitivecomputing/master/material/aulas/lab02/cogumelo.png Resolving raw.githubusercontent.com (raw.githubusercontent.com)... 185.199.108.133, 185.199.109.133, 185.199.110.133, ... Connecting to raw.githubusercontent.com (raw.githubusercontent.com)|185.199.108.133|:443... connected. HTTP request sent, awaiting response... 200 OK Length: 48478 (47K) [image/png] Saving to: ‘cogumelo.png.3’ cogumelo.png.3 100%[===================>] 47.34K --.-KB/s in 0.01s 2023-02-10 19:36:14 (4.43 MB/s) - ‘cogumelo.png.3’ saved [48478/48478] /content: Scheme missing. FINISHED --2023-02-10 19:36:14-- Total wall clock time: 0.06s Downloaded: 1 files, 47K in 0.01s (4.43 MB/s)
Filtro negativo (Inverte imagem)¶
Para aplicar um filtro negativo precisamos inverter os seus valores, ou seja, em uma imagem binária realizamos a troca de 0 pra 1 e de 1 para 0 para cada pixel da imagem.
import cv2
imagem = cv2.imread("cogumelo.png")
image = cv2.cvtColor(imagem, cv2.COLOR_BGR2GRAY)
plt.imshow(image, interpolation="none", cmap="gray")
plt.show()
import cv2
imagem = cv2.imread("cogumelo.png")
image = cv2.cvtColor(imagem, cv2.COLOR_BGR2GRAY)
for y in range(0, image.shape[0]):
for x in range(0, image.shape[1]):
##### aqui eu inverto o valor do pixel
if image[y, x] == 255:
image[y,x] = 0
else:
image[y,x] = 255
plt.imshow(image, interpolation="none", cmap="gray")
plt.show()
Desafio 1¶
Faça uma implementação que inverte as cores de uma imagem em escala de cinza, com valores que vão de 0 ate 255. dica: a forma explicita de fazer uma inversãão é: a = 255 - a
# implemente aqui sua solução
Desafio 2¶
Faça o mesmo par uma imagem colorida, realize a inversão de cores dos canais R, G e B.
o resultado deve ser parecido com a imagem abaixo:
# Implemente aqui sua solução
Recorte da imagem (crop)¶
O recorte de uma parte da imagem, ou crop, consiste em extrair da imagem uma região de interresse (ROI).
import cv2
imagem = cv2.imread("drone.jpg")
image = cv2.cvtColor(imagem, cv2.COLOR_BGR2RGB)
plt.imshow(image, interpolation="none")
plt.show()
image2 = image.copy()
#crop_img = img[y:y+h, x:x+w]
image2 = image[50:250,580:950]
plt.imshow(image2, interpolation="none", cmap="gray")
plt.show()
Desafio3¶
Ajude o nosso sayajin!!
A imagem foi dividida em 4 quadrantes aleatorios e precisamos organizar essa bagunça. Faça a reconstrução da imagem nas posições corretas.
Dica: Crie uma copia da imagem original (img2 = img.copy()), faça um crop da imagem 4 partes (crop1, crop2, crop3, crop4), junte as partes cortadas na ordem correta na img2. no final Salve a imagem (cv2.imwrite())
import cv2
imagem = cv2.imread("gokuinvertido.jpg")
image = cv2.cvtColor(imagem, cv2.COLOR_BGR2RGB)
altura = image.shape[0]
largura = image.shape[1]
print("altura: {} largura: {}".format(altura, largura))
plt.imshow(image, interpolation="none")
plt.show()
# para salvar imagem
#cv2.imwrite("gokunormal.jpg", cv2.cvtColor(image2, cv2.COLOR_RGB2BGR))
altura: 720 largura: 1280
#implemente sua solução
Seguimentação de imagens¶
Agora que sabemos como manipular pixel e como alterar seu valor e sua posição. Podemos fazer atividades mais complexas como conseguir reaalizar a seguimentação de algum objeto ou item da imagem (video), Como na imagem abaixo.
Desafio 4¶
De forma intuitiva realize algumas mudanças no código e veja o efeito que causa na imagem. Este exercio é apenas um aperitivo de algumas tecnicas que vamos estudar na proxima aula.
# Entenda o codigo e faça as alterações que achar necessárias
import cv2
imagem = cv2.imread("drone.jpg")
image = cv2.cvtColor(imagem, cv2.COLOR_BGR2RGB)
print(image.shape)
for y in range(0, image.shape[0]):
for x in range(0, image.shape[1]):
if image[y,x,1] > 170 :
image[y,x]= (255,255,255)
plt.imshow(image, interpolation="none")
plt.show()
(420, 1120, 3)
Desafio 5¶
Vamos tentar fazer o contrario, vamos tentar filtar o fundo da imagem sem o drone
# Implemente seu código aqui