OpenCV: conceitos da API e tipos de dados básicos

Preparar um novo projeto de código em OpenCV é um processo bastante simples. Ele requer incluir os arquivos de cabeçalho e instruir o compilador para encontrar os arquivos e bibliotecas usadas no projeto.

OpenCV é composta por vários módulos, agrupando funcionalidades relacionadas. Cada módulo tem um arquivo de cabeçalho associado (por exemplo, core.hpp) localizado no diretório com o mesmo nome que o módulo (isto é, OPENCV_BUILD\install\include\opencv2\<module>). Os módulos fornecidos com a versão utilizada da OpenCV (2.4.10) são os seguintes:

  • core: Este módulo define as funções básicas (core) utilizados por todos os outros módulos e estruturas de dados fundamentais, incluindo a matriz multidimensional (Mat);
  • highgui: Este módulo fornece capacidades para criação interface de usuário (UI) de forma simples e fácil para utilização em exibição de vídeo e captura de imagens.
  • imgproc: Este módulo inclui funções de processamento de imagem que incluem filtragem (linear e não-linear), transformações geométricas, conversão de espaço de cores, e assim por diante.
  • features2d: Este módulo inclui funções para detecção de recurso (cantos e objetos planos), descrição de recursos, correspondência recursos, e assim por diante.
  • objdetect: Este módulo inclui funções para detecção de objetos e instâncias pré-definidos das classes de detecção (por exemplo, rosto, olhos, sorriso, pessoas, carros, e assim por diante).
  • video: Este módulo fornece a funcionalidade de análise de vídeo (estimativa de movimento, extração de fundo e rastreamento de objetos).
  • gpu: Este módulo fornece um conjunto de algoritmos acelerados por GPU para algumas funções em outros módulos da OpenCV.
  • ml: Este módulo inclui funções para implementar ferramentas de aprendizagem de máquina, tais como classificação estatística, regressão e agrupamento de dados.
  • Alguns outros módulos menos habituais são relacionados à calibração da câmara, clustering, fotografia computacional, images stitching, OpenCL-accelerated CV, super resolução, e outros.

Todas as classes OpenCV e funções estão no namespace cv. Consequentemente, teremos duas opções a seguir em nosso código fonte:

  • Adicione o declaração using de namespace cv depois de incluir os arquivos de cabeçalho
  • Acrescente o especificador cv::  como um prefixo para todas as classes OpenCV, funções e estruturas de dados que for utilizar. Esta opção é recomendada se houver a necessidade de utilização de outras bibliotecas externas, para evitar conflitos com a OpenCV.
Imagem1

Array de canal único de inteiros sem sinal de 8 bits para uma imagem em tons de cinza (SUAREZ, 2014).

A classe DataType define os tipos de dados primitivos para a OpenCV. Os tipos de dados primitivos podem ser bool, unsigned char, signed char, unsigned short, signed short, int, float, double, ou uma tupla de valores de um desses tipos primitivos. Qualquer tipo primitivo pode ser definido por um identificador na seguinte forma:

CV_<bit depth>{U|S|F}C(<number of channels>)

No código anterior, U, S e F representam unsigned, signed e float respectivamente. Para as arrays de canal único, a seguinte enumeração é aplicada descrevendo os tipos de dados:

enum {CV_8U=0, CV_8S=1, CV_16U=2, CV_16S=3, CV_32S=4, CV_32F=5, CV_64F=6};

O diagrama a seguir mostra uma representação gráfica de um único canal (4 x 4) array com 8 bits de inteiros sem sinal (CV_8U). Neste caso, cada elemento deve ter um valor de zero a 255, o que pode ser representado por uma imagem em tons de cinza.

Podemos definir todos os tipos de dados anteriores para arrays multicanal (até 512 canais). O diagrama a seguir ilustra uma representação gráfica de três canais 4 x 4 de array de 8 bits de inteiros sem sinal (CV_8UC3). Neste exemplo, o array é constituído por tuplas de três elementos correspondentes a uma imagem RGB.

Um conjunto de três canais de inteiros sem sinal de 8 bits para uma imagem RGB (SUAREZ, 2014).

Um conjunto de três canais de inteiros sem sinal de 8 bits para uma imagem RGB (SUAREZ, 2014).

 

Referências

SUAREZ, O. D., et al. OpenCV Essentials. Packt Publishing Ltd, 2014.

You may also like...

Leave a Reply

Your email address will not be published. Required fields are marked *