O post Carregando uma imagem em um objeto do tipo Mat é uma parte do curso Processamento digital de imagens utilizando a biblioteca OpenCV. O objetivo deste curso é trabalhar com processamento digital de imagens utilizando a linguagem Java juntamente com a biblioteca OpenCV abordado desde a configuração do OpenCv até a utilização dos recursos mais avançados da biblioteca, como por exemplo a detecção facial. O objetivo final é desenvolver um projeto que contenha todos os tópicos abordados sobre o tema Processamento digital de imagens.
Carregando uma imagem em um objeto do tipo Mat – PDI 02
O post cria o menu inicial do projeto, as variáveis que serão utilizadas para representar a imagem que será processada digitalmente e inicia o desenvolvimento do método responsável por exibir a imagem na tela.
Carregando uma imagem em um objeto do tipo Mat – PDI 02
Fundamentação teórica OpenCV
Estrutura do Objeto Mat
Mat é basicamente uma classe com duas partes de dados: o cabeçalho matriz (contendo informação, tais como o tamanho da matriz, o método utilizado para o armazenamento, em que o endereço é a matriz armazenada, e assim por diante) e um ponteiro para a matriz contendo a os valores de pixel (de tomar qualquer dimensionalidade dependendo do método escolhido para o armazenamento). O tamanho do cabeçalho matriz é constante, no entanto, o tamanho da matriz em si pode variar de imagem para a imagem e, geralmente, é maior por ordens de grandeza.
Este é sobre como você armazenar os valores de pixel. Você pode selecionar o espaço de cores eo tipo de dados usado. O espaço de cor refere-se à forma como combinamos componentes de cor, de modo a codificar uma determinada cor. O mais simples é a escala de cinza, onde as cores à nossa disposição são preto e branco. A combinação destes permite-nos criar muitos tons de cinza.Obervação: Em vídeos futuros vamos trabalhar ativamente com objetos do tipo Mat e vamos detalhar os divertos tipos de dados utilizados para representar imagens em tons de cinza e coloridas (CvTypes).
Armazenamento dos dados (pixels) em Mat
Para armazenar os pixels em mat é necessário definir o espaço de cor e o tipo de dado para representar esse espaço de cor, como exemplo, representar uma imagem coloria no espaço de cor RGB.
O espaço de cor refere-se à forma como combinamos componentes de cor, de modo a codificar uma determinada cor. O mais simples é a escala de cinza, onde as cores à nossa disposição são preto e branco. A combinação destes permite-nos criar muitos tons de cinza. Para formas coloridas que temos muito mais métodos para escolher. Cada uma delas divide-os em três ou quatro componentes básicos e podemos usar a combinação destes para criar as outras. O mais popular é RGB, principalmente porque esta é também a forma como nosso olho aumenta cores. Suas cores de fundo são vermelho, verde e azul. Para codificar a transparência de uma cor, por vezes, um quarto elemento: alfa (A) é adicionado.
Há, no entanto existe muitos outros sistemas de cores, cada um com suas próprias vantagens:
RGB é o mais comum como os nossos olhos usar algo semelhante, no entanto, tenha em mente que o sistema de exibição padrão OpenCV compõe as cores utilizando o espaço de cor BGR. (azul,verde,vermelho).
O HSV e HLS é a abreviatura para o sistema de cores formadas pelas componentes hue(matiz), saturation (saturação) e value (valor). (Mais informações)
YCrCb é utilizado pelo formato de imagem JPEG populares.
CIE L * a * b * é um espaço de cores perceptivelmente uniforme, o que se torna útil se você precisa para medir a distância de uma determinada cor para outra cor.
Cada um dos componentes de construção tem seus próprios domínios válidos. Isto leva ao tipo de dados utilizados. Como armazenamos um componente define o controle que temos sobre seu domínio. O menor tipo de dados possível é char, o que significa um byte ou 8 bits. Isto pode ser assinado (assim pode armazenar os valores de 0 a 255). Embora no caso de três componentes isso já dá 16 milhões de cores possíveis para representar (como no caso de RGB) podemos adquirir um controle melhor utilizando dados do tipo float (4 bytes = 32 bits) ou double (8 byte = 64 bits) tipos para cada componente de cor. No entanto, lembrar que o aumento do tamanho de um componente também aumenta o tamanho de toda a imagem na memória.
Representação da matriz de pixels do objeto Mat na memória do computador
O tamanho da matriz de pixels vai depender do sistema de cor utilizado, mais específico a quantidade de canais utilizados.
No caso de uma imagem em tons de cinza nos teremos uma estrutura parecida com a imagem a seguir:
No caso das imagens com mais de um canal, cada coluna da matriz será formada por sub colunas que representam a quantidade de canais da imagem. No caso de uma imagem RGB a matriz de pixel é representada conforme imagem a seguir. A pri
Na aula 4 vamos começar a explicar na prática essa questão dos canais da imagem.
Mestre em Ciência da Computação pela Universidade Estadual de Maringá - UEM, Pós-Graduado em Redes de Computadores e Comunicação de Dados pela Universidade do Estado do Paraná - UEL, Bacharel em Ciência da Computação pela Universidade do Oeste Paulista - UNOESTE.
Atuo na área acadêmica como professor desde 2006. Atualmente leciono na UNOESTE (Universidade do Oeste Paulista), no SENAC (Serviço Nacional de Aprendizagem Comercial) e possuo vários cursos na Udemy (https://www.udemy.com/user/danilo-filitto/).
Além disso, sou o CEO dos sites https:www.dfilitto.com.br e https:www.makeindiegames.com.br
Você também pode me encontrar no YouTube por meio do endereço https://www.youtube.com/danilofilittoppr
Aprenda a criar seus próprios jogos com os melhores desenvolvedores
Gerenciar Consentimento de Cookies
Para fornecer as melhores experiências, usamos tecnologias como cookies para armazenar e/ou acessar informações do dispositivo. O consentimento para essas tecnologias nos permitirá processar dados como comportamento de navegação ou IDs exclusivos neste site. Não consentir ou retirar o consentimento pode afetar negativamente certos recursos e funções.
Funcional
Sempre ativo
O armazenamento ou acesso técnico é estritamente necessário para a finalidade legítima de permitir a utilização de um serviço específico explicitamente solicitado pelo assinante ou utilizador, ou com a finalidade exclusiva de efetuar a transmissão de uma comunicação através de uma rede de comunicações eletrónicas.
Preferências
O armazenamento ou acesso técnico é necessário para o propósito legítimo de armazenar preferências que não são solicitadas pelo assinante ou usuário.
Estatísticas
O armazenamento ou acesso técnico que é usado exclusivamente para fins estatísticos.O armazenamento técnico ou acesso que é usado exclusivamente para fins estatísticos anônimos. Sem uma intimação, conformidade voluntária por parte de seu provedor de serviços de Internet ou registros adicionais de terceiros, as informações armazenadas ou recuperadas apenas para esse fim geralmente não podem ser usadas para identificá-lo.
Marketing
O armazenamento ou acesso técnico é necessário para criar perfis de usuário para enviar publicidade ou para rastrear o usuário em um site ou em vários sites para fins de marketing semelhantes.