Pular para o conteúdo
OpenCV 5 chega com novo motor DNN, suporte ONNX ampliado e aceleração de hardware

OpenCV 5 chega com novo motor DNN, suporte ONNX ampliado e aceleração de hardware

OpenCV 5 lança motor DNN avançado, cobertura ONNX acima de 80%, tipos FP16/BF16 e recursos 3D, reforçando visão computacional em Python e C++.

A biblioteca OpenCV atinge sua maior atualização em mais de duas décadas com o lançamento da versão 5. Disponível em pip a partir de 8 de junho de 2026, a nova versão traz um motor DNN totalmente reformulado, suporte ONNX ampliado para mais de 80 % dos operadores, aceleração de hardware aprimorada, tipos de dados FP16/BF16 e avanços significativos em visão 3D.

Por que o OpenCV 5 foi necessário?

Desde a versão 4, a visão computacional evoluiu para combinar algoritmos clássicos, deep learning, transformers e modelos de grande porte. Usuários exigem que o mesmo código rode de forma eficiente em laptops, servidores, dispositivos embarcados, chips ARM, Snapdragon e aceleradores especializados. O OpenCV 5 foi desenvolvido para atender a essa realidade, focando em:

  • Desempenho: núcleo mais rápido e compacto, com API C legada removida.
  • Suporte a linguagens: bindings modernizados para Python, argumentos nomeados e tipagem clara.
  • Motor DNN: arquitetura baseada em grafo, fusão de operadores e inferência dinâmica.
  • Aceleração: camada de hardware simplificada para que fornecedores integrem kernels otimizados sem #ifdefs excessivos.
  • Visão 3D: calibração multi‑câmera, ChArUco e visualização aprimorada.
  • Documentação: navegação renovada e exemplos mais claros.

O novo motor DNN: cobertura e velocidade

A mudança mais impactante é a substituição do motor clássico (versão 4.x) por um motor baseado em grafo tipado. Isso permite:

  • Cobertura ONNX acima de 80 %, frente a ~22 % na versão anterior.
  • Suporte a subgrafos If/Loop, formas simbólicas e dinâmicas, e grafos QDQ (quantização).
  • Fusão de atenção e MatMul, usando implementação similar ao FlashAttention, resultando em execução mais rápida.

Comparativo de desempenho (CPU Intel Core i9‑14900KS)

Modelo OpenCV 5 (ms) ONNX Runtime (ms) Diferença
XFeat 6.5 8.6 31 % mais rápido
YOLOv8n 10.9 12.1 11 % mais rápido
YOLOX‑S 23.4 25.1 7 % mais rápido
DINOv2 small 23.7 29.5 24 % mais rápido
RF‑DETR 102.0 106.4 4 % mais rápido
OWLv2 1 090 1 489 36 % mais rápido
BiRefNet 7.1 9.5 32 % mais rápido

Os resultados mostram que, mesmo em CPU, o motor nativo do OpenCV 5 supera o ONNX Runtime em diversos cenários, de detectores leves a modelos de visão aberta.

Como escolher o motor DNN

A API cv::dnn::readNet* aceita o parâmetro engine da enumeração cv::dnn::EngineType:

Valor Significado
ENGINE_CLASSIC (1) Força o motor clássico (suporta CUDA, OpenVINO, etc.).
ENGINE_NEW (2) Usa o novo motor baseado em grafo (CPU‑only).
ENGINE_AUTO (3) Padrão: tenta o novo motor e recai ao clássico se falhar.
ENGINE_ORT (4) Wrapper ao ONNX Runtime (necessita compilação com WITH_ONNXRUNTIME=ON).

Com ENGINE_AUTO, a maioria dos projetos não requer alterações de código; a biblioteca decide automaticamente.

Exemplo em Python

import cv2 as cv

# Comportamento padrão (ENGINE_AUTO)
net = cv.dnn.readNetFromONNX("model.onnx")

# Forçar o motor novo
# net = cv.dnn.readNetFromONNX("model.onnx", engine=cv.dnn.ENGINE_NEW)

net.setInput(blob)
out = net.forward()

Exemplo em C++

#include <opencv2/dnn.hpp>
using namespace cv;

// Padrão (ENGINE_AUTO)
dnn::Net net = dnn::readNetFromONNX("model.onnx");

// Forçar o motor clássico, útil para CUDA/OpenVINO
// dnn::Net net = dnn::readNetFromONNX("model.onnx", dnn::ENGINE_CLASSIC);

net.setInput(blob);
Mat out = net.forward();

Modelos que funcionam “out‑of‑the‑box”

A nova cobertura ONNX habilita a execução direta de modelos modernos, como:

  • Detectores: YOLOv8, YOLOX, RF‑DETR
  • Segmentadores: BiRefNet, DINOv2
  • Modelos de linguagem visual (VLM) e grandes modelos de linguagem (LLM): Qwen 2.5, Gemma 3, PaliGemma, GPT‑2/4

Esses modelos podem ser carregados e inferidos sem dependências externas, facilitando pipelines que combinam visão e linguagem.

LLMs e VLMs dentro do OpenCV

O OpenCV 5 incorpora:

  • Tokenizer nativo – converte texto em tokens diretamente na biblioteca.
  • KV‑cache – mantém estado de decodificação autoregressiva, reduzindo custo computacional em geração sequencial.

Com isso, é possível rodar pequenos LLMs ou VLMs para tarefas como legendagem de imagens, pós‑processamento de OCR ou consultas de visão aberta, tudo usando a mesma API cv::dnn::Net.

Inpainting e difusão com LaMa

Um dos demos mais chamativos é a remoção de objetos usando o modelo LaMa. O fluxo consiste em:

  1. Carregar a imagem e a máscara.
  2. Criar um blob com cv.dnn.blobFromImages.
  3. Executar um único forward() no motor DNN.
  4. Obter a imagem preenchida.
import cv2 as cv

net = cv.dnn.readNetFromONNX("lama.onnx")
blob = cv.dnn.blobFromImages([img, mask], scalefactor=1/255.)
net.setInput(blob)
out = net.forward()   # Imagem inpainted

O exemplo completo está em samples/dnn/inpainting.py no branch 5.x.

Correspondência de recursos moderna (Deep Learning)

A tradicional pilha Features2D ganha concorrentes baseados em aprendizado:

  • ALIKED – detector e descritor CNN que substitui SIFT/ORB.
  • DISK – recursos aprendidos por reforço, robustos em cenas de amplo baseline e baixa textura.
  • LightGlueMatcher – correspondência baseada em atenção, entrega pontuações de confiança.

Os detectores clássicos permanecem disponíveis, mas o novo módulo permite migrar gradualmente para pipelines aprendidos, inclusive no módulo de stitching, que agora usa LightGlueFeaturesMatcher para panoramas mais precisos.

Núcleo mais rápido e tipos de dados avançados

Além das melhorias de DNN, o OpenCV 5 introduz:

  • Tipos FP16 (cv::hfloat, CV_16F) e BF16 (cv::bfloat, CV_16BF) – adequados para workloads de IA.
  • Suporte a bool, inteiros 64‑bit e outros – ampliando a expressividade das matrizes.
  • Gerenciamento de memória unificado – pool de buffers reutilizado agressivamente, reduzindo alocações desnecessárias.

Essas mudanças beneficiam tanto código clássico de processamento de imagens quanto aplicações de aprendizado profundo.

Documentação renovada

A documentação recebeu redesign responsivo, com navegação por tópicos, exemplos práticos e guia de migração da versão 4.x para 5.x. O objetivo é eliminar a sensação de “lutar contra a documentação”, facilitando a adoção das novas APIs.

O que vem a seguir?

A equipe já indica duas grandes linhas de desenvolvimento:

  • Suporte nativo a GPU no novo motor DNN, permitindo aceleração completa em CUDA, Vulkan e outros.
  • HAL não‑CPU para pré‑ e pós‑processamento acelerado, reduzindo a dependência de código CPU‑only.

Contribuições da comunidade são bem‑vindas; o repositório no GitHub contém instruções para compilar, testar e submeter pull requests.

Conclusão

OpenCV 5 representa um salto significativo em desempenho, cobertura de modelos e modernização da API. Ao unificar visão clássica e deep learning sob um mesmo framework, a biblioteca consolida sua posição como padrão de fato para visão computacional em projetos de pesquisa, indústria e dispositivos embarcados. A atualização está disponível em pip (pip install opencv-python==5.*) e nos repositórios oficiais para compilação personalizada.

Via opencv.org. Você pode conferir o post original em inglês:

OpenCV 5 Is Here: The Biggest Leap in Years for Computer Vision

Por · Última atualização: