OpenCV
OpenCV é uma biblioteca de código aberto com mais de 2.500 algoritmos para processamento de imagens e visão computacional. O que faz, como se combina com aprendizagem profunda e código.
A OpenCV (Biblioteca de Visão Computacional de Código Aberto) é uma biblioteca de código aberto com mais de 2.500 algoritmos otimizados para processamento de imagens e visão computacional (CV). Ela lê e grava imagens e vídeos, captura fluxos de câmeras, filtra e transforma pixels, detecta e associa características, calibra câmeras e executa redes neurais treinadas. A OpenCV começou no centro de pesquisa da Intel em 1999, é escrita em C++ com bindings para Python e Java e, desde a versão 4.5.0, é distribuída sob a licença Apache 2.0. Em Python, é instalada com pip install opencv-python e importada como cv2; cada imagem é representada como um array NumPy.
O que a OpenCV faz#
- Entrada e saída de imagens e vídeos: lê e grava formatos de imagem comuns, decodifica arquivos de vídeo e captura quadros de câmeras e fluxos de rede.
- Processamento de imagens: redimensionamento, conversão de espaço de cores, desfoque, nitidez, limiarização e operações morfológicas, as etapas padrão de pré-processamento antes de uma imagem chegar ao modelo.
- Detecção e associação de características: detectores de cantos e pontos-chave, como SIFT e ORB, encontram pontos distintos que podem ser associados entre imagens para montar panoramas, localizar objetos e executar SLAM visual. O SIFT foi incorporado à biblioteca principal na versão 4.4.0, após a expiração de sua patente.
- Geometria de câmera: a calibração remove a distorção da lente, as homografias corrigem a perspectiva e a associação estéreo recupera a profundidade usando duas câmeras para robótica e reconstrução 3D.
- Análise de vídeo: a subtração de fundo separa objetos em movimento de uma cena estática, e o fluxo óptico mede o deslocamento dos pixels entre quadros.
- Inferência de redes neurais profundas: o módulo
dnncarrega modelos treinados, por exemplo no formato ONNX, e os executa na CPU ou GPU sem precisar instalar uma estrutura de aprendizado profundo.
Este pipeline clássico encontra os contornos de formas em uma imagem sem usar nenhum modelo aprendido:
import urllib.request
import cv2
import numpy as np
# Download a sample image and decode it into a BGR NumPy array
data = urllib.request.urlopen("https://ultralytics.com/images/bus.jpg").read()
image = cv2.imdecode(np.frombuffer(data, np.uint8), cv2.IMREAD_COLOR)
# Classical pipeline: grayscale, blur to suppress noise, then Canny edge detection
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
blurred = cv2.GaussianBlur(gray, (5, 5), 0)
edges = cv2.Canny(blurred, 50, 150)
# Trace connected edge pixels into contours, the outlines of shapes in the scene
contours, _ = cv2.findContours(edges, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
print(f"Image shape: {image.shape}, contours found: {len(contours)}")Ele imprime Image shape: (1080, 810, 3), contours found: 1449: uma imagem de 1080×810 com três canais de cor e 1.449 contornos separados traçados a partir das bordas. A OpenCV armazena os canais de cor na ordem azul-verde-vermelho (BGR), então as imagens enviadas a bibliotecas que esperam RGB precisam primeiro de uma conversão cv2.cvtColor.
OpenCV e estruturas de aprendizado profundo#
A OpenCV e as estruturas de aprendizado profundo, como PyTorch e TensorFlow, atuam em etapas diferentes do mesmo pipeline. A OpenCV cuida do pré-processamento de dados e das saídas ao redor da rede: captura quadros, redimensiona-os, desenha resultados e grava o vídeo de saída; a estrutura treina e executa a rede neural convolucional entre essas etapas. Um aplicativo de vídeo em tempo real repete estas etapas em cada quadro:
O Ultralytics YOLO26 aceita diretamente os quadros NumPy BGR da OpenCV, e results[0].plot() retorna um quadro anotado no mesmo formato; assim, o modelo se integra a um loop da OpenCV sem nenhuma conversão. Este exemplo executa uma passagem desse loop na imagem de amostra incluída no pacote ultralytics:
import cv2
from ultralytics import YOLO
from ultralytics.utils import ASSETS
# A OpenCV carrega a imagem de amostra incluída como um array NumPy BGR
frame = cv2.imread(str(ASSETS / "bus.jpg"))
# O YOLO26 recebe diretamente o quadro da OpenCV
model = YOLO("yolo26n.pt")
results = model(frame)
# plot() retorna um array BGR anotado que a OpenCV pode exibir ou salvar
annotated = results[0].plot()
cv2.imwrite("bus_annotated.jpg", annotated)Dentro de um loop de vídeo, as mesmas três chamadas são executadas em cada quadro de cv2.VideoCapture, e cv2.imshow ou cv2.VideoWriter substitui cv2.imwrite.










