Visão Computacional com Python e OpenCV: Reconhecimento de Imagens na Prática

O que é Visão Computacional?
A Visão Computacional (Computer Vision) é um campo da inteligência artificial que capacita máquinas a interpretar e tomar decisões com base em dados visuais do mundo real — imagens, vídeos e streams ao vivo. Com o avanço de bibliotecas como OpenCV (Open Source Computer Vision Library) e frameworks de deep learning, tornou-se possível construir sistemas que reconhecem rostos detectam objetos em tempo real e até dirigem carros de forma autônoma.
Neste artigo vamos explorar os conceitos fundamentais da Visão Computacional com Python e OpenCV desde o carregamento básico de imagens até técnicas avançadas como detecção de objetos e reconhecimento facial.
Introdução ao OpenCV
O OpenCV é a biblioteca open source mais popular para processamento de imagens e visão computacional. Criada pela Intel em 1999 ela oferece mais de 2500 algoritmos otimizados para tarefas visuais. Com bindings para Python C++ Java e JavaScript é a escolha padrão tanto para prototipagem rápida quanto para sistemas de produção.
Para instalar o OpenCV no seu ambiente Python basta usar o pip:
pip install opencv-python opencv-contrib-python numpy matplotlibO pacote opencv-python contém os módulos principais enquanto opencv-contrib-python adiciona funcionalidades extras como algoritmos de tracking e reconhecimento facial.
Manipulação Básica de Imagens
Vamos começar com as operações fundamentais: ler exibir e salvar imagens.
import cv2
import matplotlib.pyplot as plt
# Ler uma imagem
img = cv2.imread("exemplo.jpg")
# Converter BGR para RGB (OpenCV carrega como BGR)
img_rgb = cv2.cvtColor(img cv2.COLOR_BGR2RGB)
# Exibir com matplotlib
plt.imshow(img_rgb)
plt.title("Imagem Original")
plt.axis("off")
plt.show()
# Salvar imagem processada
cv2.imwrite("saida.jpg" img_rgb[:, : ::-1]) # Converte de volta para BGRImportante: O OpenCV carrega imagens no formato BGR (Blue Green Red) enquanto o matplotlib espera RGB. Essa diferença sutil é uma das fontes mais comuns de bugs para iniciantes. Sempre converta com cv2.COLOR_BGR2RGB antes de exibir.
Processamento de Imagens
O OpenCV oferece dezenas de funções para transformar e melhorar imagens. Veja as mais úteis:
Redimensionamento
# Redimensionar para 300x200 pixels
img_redim = cv2.resize(img_rgb (300 200))
# Redimensionar mantendo proporção (fator 0.5)
escala = 0.5
largura = int(img_rgb.shape[1] * escala)
altura = int(img_rgb.shape[0] * escala)
img_menor = cv2.resize(img_rgb (largura altura))Filtros e Suavização
# Desfoque Gaussiano
img_blur = cv2.GaussianBlur(img_rgb (5 5) 0)
# Detecção de bordas (Canny)
img_bordas = cv2.Canny(img_rgb 100 200)
# Limiarização (threshold)
img_cinza = cv2.cvtColor(img cv2.COLOR_BGR2GRAY)
_ img_thresh = cv2.threshold(img_cinza 127 255 cv2.THRESH_BINARY)Transformações Morfológicas
# Erosão e Dilatação
kernel = cv2.getStructuringElement(cv2.MORPH_RECT (5 5))
img_erodida = cv2.erode(img_binary kernel iterations=1)
img_dilatada = cv2.dilate(img_binary kernel iterations=1)Detecção de Objetos com Haar Cascades
O OpenCV inclui classificadores pré-treinados chamados Haar Cascades que permitem detectar rostos olhos sorrisos e outros objetos com poucas linhas de código.
# Carregar classificador pré-treinado para faces
face_cascade = cv2.CascadeClassifier(
cv2.data.haarcascades + "haarcascade_frontalface_default.xml"
)
# Detectar faces na imagem
faces = face_cascade.detectMultiScale(
img_cinza
scaleFactor=1.1
minNeighbors=5
minSize=(30 30)
)
# Desenhar retângulos ao redor das faces
for (x y w h) in faces:
cv2.rectangle(img_rgb (x y) (x+w y+h) (0 255 0) 2)
print(f"{len(faces)} face(s) detectada(s)!")O parâmetro scaleFactor controla o quanto a imagem é reduzida a cada escala (1.1 = 10%) enquanto minNeighbors define quantos vizinhos positivos são necessários para confirmar uma detecção. Valores mais altos reduzem falsos positivos.
Segmentação de Imagens
A segmentação divide uma imagem em regiões de interesse. Técnicas comuns incluem:
- Segmentação por cor: use espaços de cor como HSV para isolar objetos por tonalidade. Ideal para objetos com cores distintas.
- Watershed: algoritmo baseado em marcadores para separar objetos que se tocam.
- GrabCut: segmentação interativa que extrai o primeiro plano do fundo com mínima intervenção do usuário.
# Segmentação por cor no espaço HSV
img_hsv = cv2.cvtColor(img cv2.COLOR_BGR2HSV)
# Faixa de cor azul
azul_baixo = (100 50 50)
azul_alto = (130 255 255)
mascara = cv2.inRange(img_hsv azul_baixo azul_alto)
# Aplicar máscara
resultado = cv2.bitwise_and(img_rgb img_rgb mask=mascara)Deep Learning para Visão Computacional
Para tarefas mais avançadas como classificação de objetos detecção precisa e segmentação semântica o deep learning oferece resultados superiores. O OpenCV suporta modelos treinados em frameworks como TensorFlow PyTorch e Caffe.
# Exemplo: Classificação com MobileNet (modelo leve)
net = cv2.dnn.readNetFromCaffe("MobileNetSSD_deploy.prototxt" "MobileNetSSD_deploy.caffemodel")
blob = cv2.dnn.blobFromImage(img 0.007843 (300 300) 127.5)
net.setInput(blob)
deteccoes = net.forward()
for i in range(deteccoes.shape[2]):
confianca = deteccoes[0 0 i 2]
if confianca > 0.5:
classe = int(deteccoes[0 0 i 1])
# Desenhar bounding box e rótuloModelos como YOLO (You Only Look Once) e SSD (Single Shot Detector) permitem detecção de objetos em tempo real rodando a mais de 30 FPS em GPUs modernas.
Aplicações Práticas
- Reconhecimento Facial: sistemas de segurança autenticação biométrica e filtros de redes sociais.
- Carros Autônomos: detecção de pedestres placas de trânsito e obstáculos.
- Visão Industrial: inspeção de qualidade leitura de códigos de barras e controle de robôs.
- Saúde: análise de exames de imagem como raio-X tomografia e ressonância magnética.
- Varejo: contagem de pessoas análise de fluxo e checkout automatizado.
Conclusão
A Visão Computacional com Python e OpenCV abre um universo de possibilidades para desenvolvedores. Começando com operações básicas de processamento de imagens e evoluindo para deep learning é possível construir sistemas incrivelmente poderosos com relativamente pouco código.
Para continuar seus estudos explore a documentação oficial do OpenCV e pratique com datasets públicos como o COCO (Common Objects in Context) e o ImageNet. O melhor aprendizado vem da prática: pegue uma imagem do seu celular e comece a experimentar!







