# OpenCV

OpenCV (Open Source Computer Vision Library), originalmente, desenvolvida pela Intel, em 2000, é uma biblioteca multiplataforma, totalmente livre ao uso acadêmico e comercial, para o desenvolvimento de aplicativos na área de Visão computacional, bastando seguir o modelo de licença BSD Intel. O OpenCV possui módulos de Processamento de Imagens e Video I/O, Estrutura de dados, Álgebra Linear, GUI (Interface Gráfica do Usuário) Básica com sistema de janelas independentes, Controle de mouse e teclado, além de mais de 350 algoritmos de Visão computacional como: Filtros de imagem, calibração de câmera, reconhecimento de objetos, análise estrutural e outros. O seu processamento é em tempo real de imagens.
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.

## Plataformas compatíveis

OpenCV pode funcionar sobre Android, BlackBerry 10, FreeBSD, iOS, Linux, Maemo, OpenBSD, OS X e Windows.

## Áreas de aplicação

* Humano-Computador Interface (HCI)
* Identificação de objetos
* Sistema de reconhecimento facial
* Reconhecimento de movimentos
* Gravação de vídeos
* Robôs móveis
* Reconstrução 3D
* Realidade virtual
* Realidade aumentada
* Realidade mista

## Estrutura do OpenCV

* 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.
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.