O OpenCV (abreviação de Open Source Computer Vision Library) é uma biblioteca livre e multi-plataforma (uso acadêmico e comercial), criada pela pela empresa Intel em 2000, para o desenvolvimento de aplicativos na área de visão computacional (sistema que interpreta informação visual) e também usada nas áreas de inteligência artificial (IA) e aprendizagem de máquina.

O OpenCV possui módulos de processamento de imagens e video, Estrutura de dados, Álgebra Linear, GUI (Interface Gráfica do Usuário) básica com sistema de janelas independentes, controle de mouse e teclado, e mais de 350 ferramentas e algoritmos de visão computacional como: filtros de imagem, calibração de câmera, reconhecimento de objetos, análise estrutural. O seu processamento das imagens ocorre em tempo real.

Esta biblioteca foi desenvolvida nas linguagens de programação C/C++. Também, dá suporte a programadores que utilizem Java, Python e Visual Basic e desejam incorporar a biblioteca a seus aplicativos. A versão 1.0 foi lançada no final de 2006 e a 2.0 foi lançada em setembro de 2009.

História Oficialmente lançado em 1999, o projeto OpenCV foi uma proposta da Intel Research de melhorar aplicações de uso intensivo de processamento, sendo parte de uma série de projetos que incluíam Ray tracing e monitores 3D. Os principais contribuidores do projeto eram da Intel Russia, assim como o time de desempenho de bibliotecas da Intel. No início do projeto, os objetivos foram definidos como:

Avançar a pesquisa em visão computacional por prover não apenas código aberto mas otimizado para tarefas básicas de visão, de modo que o código pudesse ser prontamente lido e transferível. Avançar aplicações baseadas em visão computacional por fazer código portátil e otimizado disponível de graça, com uma licença que não requer que a aplicação seja de código aberto.

Características O OpenCV trabalha com análise visual em tempo real na inteligência artificial (IA) e no aprendizado de máquina (ou aprendizagem automática ML), fazendo o pré-processamento de imagens ou vídeos antes de introduzir nos modelos de aprendizagem de máquina e nos modelos de aprendizagem profunda (DL). O pré-processamento do OpenCV inclui: o redimensionamento, a conversão do espaço de cores (como BGR para RGB), a redução de ruído da imagem, melhoria da qualidade da imagem para extrair caraterísticas relevantes (algoritmos SIFT, SURF, FAST que identificam pontos-chave na imagem), processamento em tempo real de fluxos de vídeo (fluxo ótico), subtração de fundo, inferência para detecção de objetos (como ferramenta cascatas Haar para deteção de rosto), entender a geometria da câmara, calibrar a câmera, compreender cenas, reconstruir cenas 3D, algoritmos clássicos de aprendizagem profunda como Support Vetor Machines (SVM) e K-Nearest Neighbors (KNN).

O OpenCV cria aplicações de visão computacional usando as bibliotecas de aprendizagem de máquina PyTorch e TensorFlow; enquanto essas bibliotecas fazem a construção e o treinamento de redes neurais, o OpenCV trabalha com a entrada/saída, a manipulação e, o pós-processamento de dados visuais (como o desenho de caixas delimitadoras ou máscaras de segmentação previstas por modelos).

Uso real o OpenCV é versátil em inúmeras aplicações de inteligência artificial e aprendizado de máquina:

Veículos autónomos: nos carros autónomos e nos assistentes de condução (ADAS) o OpenCV é usado para o processamento inicial de dados da câmera e do LiDAR: deteção de faixas, o reconhecimento de obstáculos (correspondência de caraterísticas), deteção de contornos, o reconhecimento de sinais de trânsito (alimentando um classificador com imagens processadas), a costura de imagens para sistemas de visão surround. Os fotogramas brutos da câmera são processados no OpenCV (correção de distorção e ajuste de brilho) para serem usados no YOLOv8 (modelo de aprendizagem profunda que detecta carros e peões).

Análise de imagens médicas: o OpenCV faz tratamento de vários formatos de imagens de exames médicos (como o DICOM): melhora o contraste da imagem para melhor visibilidade das anomalias, segmenta regiões de interesse (tumores ou órgãos) usando algoritmo de limiarização ou de bacias hidrográficas, regista imagens tiradas em momentos diferentes. Os dados visuais pré-processados são analisados por modelos de aprendizado de máquina especializados para diagnóstico (IA em Radiologia - RSNA).

Outras áreas: Robótica com a Integrating Computer Vision in Robotics, Vigilância com a Security Alarm Systems, Realidade aumentada: no controle da saúde de lantas na agricultura, Realidade virtual, Humano-Computador Interface (HCI), Sistema de reconhecimento facial, Reconhecimento de movimentos, Robôs móveis, Reconstrução 3D, Opentoonz usa o OpenCV para determinadas funcionalidades de visão computacional.

Plataformas compatíveis Esta biblioteca multi-plataforma funciona com: Android,Android port: http://opencv.willowgarage.com/wiki/AndroidExperimental BlackBerry 10,BlackBerry 10 (partial port): https://github.com/blackberry/OpenCV FreeBSD, iOS,iPhone port: http://www.eosgarden.com/en/opensource/opencv-ios/overview/ Linux, Maemo,Maemo port: https://garage.maemo.org/projects/opencv OpenBSD, OS X e, Windows.

Estrutura cv — Módulo das principais funcionalidades e algoritmos de Visão Computacional do OpenCV. cvaux — Módulo com algoritmos de Visão, ainda está em fase experimental. cxcore — Módulo de Estrutura de Dados e Álgebra Linear. highgui — Módulo de Controle de Interface e dispositivos de entrada. ml — Módulo de “Machine Learning” é um módulo processador de imagem que utiliza algoritmos com aprendizagem de maquina. dnn — Módulo de “Deep Learning” é um módulo processador de imagem que utiliza algoritmos com aprendizagem de máquina profundo. ed — Manual de estrutura de dados e operações.

Linguagem de programação O OpenCV é escrito em C++ e sua interface principal é em C++, mas ainda mantém uma interface C mais antiga, menos abrangente, embora extensa. Todos os novos desenvolvimentos e algoritmos aparecem na interface C++. Existem ligações em Python (por exemplo, métodos OpenCV cv.line, OpenCV cv2.cvtcolor, OpenCV cv2.circle), Java e, MATLAB/OCTAVE. A API para essas interfaces pode ser encontrada na documentação online.OpenCV C interface: http://docs.opencv.org

Wrappers em várias linguagens de programação foram desenvolvidos para incentivar a adoção por um público mais amplo. Na versão 3.4, as ligações JavaScript para um subconjunto selecionado de funções OpenCV foram lançadas como OpenCV.js, para serem usadas em plataformas da web.Introduction to OpenCV.js and Tutorials

Limitações A complexidade de alguns algoritmos que a biblioteca usa, pode exigir um conhecimento avançado em matemática e programação. E a performance pode variar dependendo do hardware usado, e da complexidade da análise realizada.

Ligações externas

OpenCV Documentation Wiki Great summary cheat sheet sumario de programação University of Leeds

Categoria:Ciência da computação Categoria:Processamento de imagem Categoria:Visão computacional Categoria:Tecnologia da informação