O OpenCV (Open Source Computer Vision Library) é uma biblioteca de código aberto para processamento de imagem e visão computacional. Ela oferece uma vasta gama de funcionalidades para manipular, analisar e transformar imagens. Vamos passar por alguns exemplos básicos usando OpenCV em Python para ilustrar como funciona.
Antes de começarmos, instale a biblioteca OpenCV no seu ambiente Python, caso ainda não tenha feito isso:
pip install opencv-python
Depois de instalar, você pode importar o OpenCV como:
import cv2
Para começar, vamos carregar uma imagem e exibi-la numa janela.
import cv2
# Carregar uma imagem
imagem = cv2.imread('exemplo.jpg') # Substitua pelo caminho da sua imagem
# Exibir a imagem
cv2.imshow('Imagem Original', imagem)
# Aguardar até que uma tecla seja pressionada e fechar a janela
cv2.waitKey(0)
cv2.destroyAllWindows()
Você pode redimensionar imagens para ajustá-las a tamanhos específicos.
import cv2
imagem = cv2.imread('exemplo.jpg')
imagem_redimensionada = cv2.resize(imagem, (300, 300)) # Redimensiona para 300x300 pixels
cv2.imshow('Imagem Redimensionada', imagem_redimensionada)
cv2.waitKey(0)
cv2.destroyAllWindows()
Um dos processos mais comuns é converter uma imagem colorida para tons de cinza ou outras representações de cor.
import cv2
imagem = cv2.imread('exemplo.jpg')
# Converter para escala de cinza
imagem_cinza = cv2.cvtColor(imagem, cv2.COLOR_BGR2GRAY)
cv2.imshow('Imagem em Tons de Cinza', imagem_cinza)
cv2.waitKey(0)
cv2.destroyAllWindows()
Filtros são usados para suavizar imagens e remover ruído. Um dos filtros mais comuns é o filtro Gaussiano.
import cv2
imagem = cv2.imread('exemplo.jpg')
# Aplicar o filtro Gaussiano
imagem_suavizada = cv2.GaussianBlur(imagem, (15, 15), 0)
cv2.imshow('Imagem Suavizada', imagem_suavizada)
cv2.waitKey(0)
cv2.destroyAllWindows()
O algoritmo Canny é usado para detectar bordas em imagens, o que é muito útil em análises de contornos.
import cv2
imagem = cv2.imread('exemplo.jpg')
imagem_cinza = cv2.cvtColor(imagem, cv2.COLOR_BGR2GRAY)
# Aplicar o detector de bordas de Canny
bordas = cv2.Canny(imagem_cinza, 100, 200)
cv2.imshow('Bordas Detectadas', bordas)
cv2.waitKey(0)
cv2.destroyAllWindows()
Você pode adicionar formas geométricas, como retângulos, círculos e linhas, diretamente em imagens.
import cv2
imagem = cv2.imread('exemplo.jpg')
# Desenhar um retângulo na imagem
cv2.rectangle(imagem, (50, 50), (200, 200), (0, 255, 0), 3)
# Desenhar um círculo na imagem
cv2.circle(imagem, (300, 300), 50, (255, 0, 0), -1)
cv2.imshow('Imagem com Formas', imagem)
cv2.waitKey(0)
cv2.destroyAllWindows()
Às vezes, você precisa ajustar a perspectiva de uma imagem, como "dobrar" ou "esticar" uma área específica.
import cv2
import numpy as np
imagem = cv2.imread('exemplo.jpg')
# Coordenadas dos pontos de origem (o que queremos transformar)
pontos_originais = np.float32([[50, 50], [200, 50], [50, 200], [200, 200]])
# Coordenadas dos pontos de destino (para onde queremos mapear)
pontos_destino = np.float32([[10, 100], [200, 50], [100, 250], [300, 200]])
# Matriz de transformação
matriz = cv2.getPerspectiveTransform(pontos_originais, pontos_destino)
# Aplicar a transformação de perspectiva
imagem_transformada = cv2.warpPerspective(imagem, matriz, (imagem.shape[1], imagem.shape[0]))
cv2.imshow('Imagem Transformada', imagem_transformada)
cv2.waitKey(0)
cv2.destroyAllWindows()
Segmentação de cor é útil para identificar e extrair regiões de uma imagem com base na cor.
import cv2
import numpy as np
imagem = cv2.imread('exemplo.jpg')
# Converter a imagem para o espaço de cores HSV
imagem_hsv = cv2.cvtColor(imagem, cv2.COLOR_BGR2HSV)
# Definir intervalos de cor para a máscara (aqui, para uma cor azul)
limite_inferior = np.array([110, 50, 50])
limite_superior = np.array([130, 255, 255])
# Criar uma máscara
mascara = cv2.inRange(imagem_hsv, limite_inferior, limite_superior)
# Aplicar a máscara na imagem original
imagem_segmentada = cv2.bitwise_and(imagem, imagem, mask=mascara)
cv2.imshow('Imagem Segmentada', imagem_segmentada)
cv2.waitKey(0)
cv2.destroyAllWindows()
Estes são exemplos introdutórios de processamento de imagem usando OpenCV em Python.