• Nenhum resultado encontrado

Processamento Digital de Imagens

N/A
N/A
Protected

Academic year: 2021

Share "Processamento Digital de Imagens"

Copied!
183
0
0

Texto

(1)

Processamento Digital de Imagens

Aula 04 Prof. Diemesleno Souza Carvalho diemesleno@iftm.edu.br

(2)
(3)

Na aula passada vimos...

Unidade III

- Desenhando;

(4)
(5)

Na aula de hoje veremos...

Unidade IV

- Processamento de imagens;

- Transformação em imagens;

- Translação;

- Rotação;

- Redimensionamento;

- Flipping;

- Cropping;

- Aritmética em imagens;

- Operações bitwise;

- Máscara;

- Divisão e Merge de canais de imagens;

- Espaço de cores.

(6)
(7)

Processamento de imagens

Processamento de imagens é qualquer forma de processamento

de dados no qual a entrada e saída são imagens tais como

tofografias ou quadros de vídeo.

(8)
(9)

Transformação em imagens

Transformação em imagens são operações que redefinem a

imagem, normalmente em relação espacial dos pontos de uma

imagem, mas também pode ser transformações em escala de cores,

canais de cores e etc.

Para realizar uma operação de transformação em imagens

utilizamos diferentes técnicas, entre elas a translação, rotação,

redimensionamento, flipping e cropping.

(10)
(11)

Translação

Translação é a técnica para processamento de imagens que

movimenta a imagem ao longo dos eixos x e y.

Utilizando a translação nós podemos movimentar a imagem para

cima, baixo, para a esquerda ou direita e mesmo combinando

qualquer direção.

(12)

Translação

(13)

Translação

(14)

Translação

(15)

Translação

Entendendo o código:

Estas linhas já são conhecidas. Estamos fazendo o importe de bibliotecas que iremos utilizar no nosso programa.

Uma observação é no último importe onde a biblioteca imutils possui métodos para realizarmos as mesmas operações que vamos fazer manualmente e depois mostrar como utilizar esta biblioteca.

(16)

Translação

(17)

Translação

Entendendo o código:

Também já sabemos o que as linhas acima faz. Estamos instanciando um objeto do tipo argparse que serve para recebermos argumentos na linha de comando durante a execução do nosso programa.

Estamos também criando um argumento chamado imagem para receber o caminho para nossa imagem e ao final recebendo esse argumento na variável args.

(18)

Translação

(19)

Translação

Entendendo o código:

Essas linhas também já sabemos o que faz. Estamos recebendo a imagem informada via linha de comando e armazenando na variável imagem.

Estamos então utilizando o OpenCV para apresentar essa imagem na tela.

(20)

Translação

(21)

Translação

Entendendo o código:

Agora sim estamos fazendo algo de novo. Estamos aplicando a técnica de translação na imagem.

Na linha 13 nós estamos criando a variável M que será nossa matriz de translação.

Essa matriz nos diz quantos pixels para esquerda ou direita

nossa imagem irá se movimentar. O mesmo para quantos pixels para cima ou baixo nossa imagem será movimentada.

(22)

Translação

Entendendo o código:

Nossa matriz de translação M é definida como ponto flutuante, pois o OpenCV espera receber os valores dessa forma.

O primeiro argumento da matriz é [1,0, tx] onde tx é o número de pixels que nós vamos movimentar a imagem para esquerda ou direita.

OBS: Valores negativos em tx irão movimentar a imagem para a

esquerda e valores positivos irão movimentar a imagem para a direita.

(23)

Translação

Entendendo o código:

O segundo argumento da matriz é [0,1,ty] onde ty é o número de pixels que nós iremos movimentar a imagem para cima ou para baixo.

OBS: Valores negativos para ty irão movimentar a imagem para

cima e valores positivos irão movimentar a imagem para baixo. Podemos ver que segundo essa notação, na linha 13 nossa

matriz irá movimentar nossa imagem 25 pixels para a direita (tx) e 50 pixels para baixo (ty).

(24)

Translação

Entendendo o código:

Na linha 14, criamos uma variável chamada movimentada que recebe o retorno do método warpAffine do OpenCV.

Esse método que realmente aplica a translação na nossa imagem. Repare que no primeiro parâmetro informamos nossa imagem. No segundo parâmetro informamos a matriz de translação e por último informamos a largura e altura da nossa imagem.

(25)

Translação

Entendendo o código:

Já a linha 15 nós sabemos que é o OpenCV apresentando a imagem após o processamento aplicado em tela.

(26)

Translação

(27)

Translação

Entendendo o código:

Estamos aplicando na imagem original, um novo processamento de translação. Dessa vez informando valores negativos para tx e

(28)

Translação

(29)

Translação

Entendendo o código:

Estamos aplicando novamente um processamento de translação na imagem original, mas desta vez utilizando a biblioteca imutils com o método translate onde informamos 3 parâmetros. O primeiro a imagem, o segundo o tx (direita e esquerda) e o terceiro o ty (cima e baixo).

(30)

Translação

Executando o código:

(31)

Translação

Executando o código:

(32)

Translação

Executando o código:

(33)
(34)

Rotação

Rotação é a técnica para processamento de imagens que

rotaciona a imagem de acordo com o ângulo informado.

(35)

Rotação

(36)

Rotação

(37)

Rotação

(38)

Rotação

Entendo o código:

Nesta primeira parte, o de sempre.

Importamos as bibliotecas necessárias, instanciamos um objeto argparse, criamos o parâmetro de entrada e recebemos os argumentos.

(39)

Rotação

(40)

Rotação

Entendendo o código:

Na linha 13, pegamos as medidas da imagem.

Na linha 14, dividimos as medidas para encontrar o centro da imagem.

OBS: Em python, a divisão w // 2 retorna um inteiro. Ou seja, arredonda a

(41)

Rotação

Entendendo o código:

Na linha 16, criamos uma matriz de rotação passando como parâmetros o centro da imagem, os graus que ela irá rotacionar e a escala da imagem.

OBS: O parâmetro de escala utilizado 1.0 informa que a imagem manterá o

mesmo tamanho. Se passássemos 2.0 o tamanho da imagem seria duplicada. Se passássemos 0.5 o tamanho seria a metade.

(42)

Rotação

Entendendo o código:

Em relação aos graus de rotação. Sendo positivos rotaciona no sentido horário e sendo negativo rotaciona no sentido anti-horário.

Repare que nas linhas de 21 a 23 estamos criando nova matriz de rotação, rotacionando e apresentando a imagem. Desta vez estamos rotacionando -90 graus em sentido anti-horário.

(43)

Rotação

Entendendo o código:

Nas linhas 25 a 27 estamos aplicando novamente a rotação na imagem, mas dessa vez utilizando o método rotate da biblioteca imutils, onde passamos apenas 2 parâmetros, sendo o primeiro a imagem que será rotacionada e quantos graus a mesma será rotacionada.

(44)

Rotação

(45)

Rotação

Executando o programa:

(46)

Rotação

Executando o programa:

(47)
(48)

Redimensionamento

Já utilizamos duas técnicas importantes para processamento de

imagens: Translação e Rotação. Agora veremos mais uma não

menos importante: Redimensionamento.

(49)

Redimensionamento

Redimensionamento é a técnica para processamento de

imagens que como o nome também sugere redimensiona a

imagem.

Ou seja, o redimensionamento altera o tamanho de uma imagem,

e neste caso é importante manter a proporção da mesma para que

a imagem não fique deformada.

(50)

Redimensionamento

Crie o programa redimensionamento.py

(51)

Redimensionamento

(52)

Redimensionamento

(53)

Redimensionamento

Entendendo o código:

(54)

Redimensionamento

Digite o seguinte código no programa redimensionamento.py:

Para redimensionar uma imagem de forma correta, para que não a deforme ou gere distorções, é necessário calcular o "aspect ratio" ou proporção da nova imagem gerada após o redimensionamento

baseado na imagem original.

Estamos fazendo isso na linha 13. Definimos que a nova imagem terá 150 pixels de largura e estamos calculando a proporção dividindo pela largura original da imagem e salvando esse valor na variável r.

(55)

Redimensionamento

Digite o seguinte código no programa redimensionamento.py:

Com o "aspect ratio" gerado, podemos calcular a nova dimensão para a imagem.

Na linha 14 criamos uma variável chamada dim que recebe o esse cálculo. Neste caso informamos novamente que a nova imagem terá 150 pixels de largura e calculamos a altura da mesma multiplicando a largura original pelo "aspect ratio" calculado anteriormente.

(56)

Redimensionamento

Digite o seguinte código no programa redimensionamento.py:

Por fim, na linha 15 utilizamos o método resize do OpenCV que recebe 3 parâmetros, sendo a imagem que será redimensionada, a dimensão que a mesma terá e o tipo de interpolação que a imagem irá sofrer. Então apresentamos a imagem redimensionada.

(57)

Redimensionamento

Digite o seguinte código no programa redimensionamento.py:

OBS: Quando falamos em interpolação, é o algoritmo que será

utilizado para reorganizar os pixels da imagem no novo tamanho.

No nosso programa estamos utilizando o algoritmo cv2.INTER_AREA pois ele gera os melhores resultados. Mas podemos utilizar também o

(58)

Redimensionamento

Digite o seguinte código no programa redimensionamento.py:

Das linhas 18 até 21 estamos criando mais uma imagem redimensionada mas dessa vez redimensionando pela altura. Definimos que a nova imagem terá 50 pixels de altura e calculamos o aspect ratio e a nova dimensão da imagem. Então utilizamos o

(59)

Redimensionamento

Digite o seguinte código no programa redimensionamento.py:

Das linhas 23 a 25 novamente aplicamos o redimensionamento mas utilizando dessa vez o método resize da biblioteca imutils.

(60)

Redimensionamento

Executando o programa:

(61)

Redimensionamento

Executando o programa:

(62)

Redimensionamento

Executando o programa:

(63)
(64)

Flipping

Outra técnica para processamento de imagens é o flipping.

Podemos aplicar esta técnica em uma imagem ao longo dos eixos x

ou y e até mesmo ambos.

(65)

Flipping

(66)

Flipping

(67)

Flipping

(68)

Flipping

Entendendo o código:

Nada de novo, mas estamos fazendo menos importe neste programa.

(69)

Flipping

(70)

Flipping

Entendendo o código:

Estamos utilizando o OpenCV para efetuar o flipping na imagem com o método flip, que recebe apenas 2 parâmetros.

O primeiro é a imagem na qual quer aplicar o processamento e o segundo é em que sentido, sendo 1 horizontal, 0 vertical e -1 ambos.

(71)

Flipping

(72)

Flipping

Executando o programa:

(73)

Flipping

Executando o programa:

(74)
(75)

Cropping

Cropping é uma técnica para processamento de imagens utilizada

para remover/extrair partes de uma imagem em que não temos

interesse.

Para realizar o cropping nós utilizamos a biblioteca Numpy e

fazemos slicing de arrays.

(76)

Cropping

(77)

Cropping

(78)

Cropping

(79)

Cropping

Entendendo o código:

Nada de novo, porém, em relação ao código anterior, importamos novamente o numpy para utilizá-lo no slice.

(80)

Cropping

(81)

Cropping

Entendendo o código:

Criamos a variável cropped que armazena o corte realizado na imagem original.

Conforme estudamos antes, nós utilizamos: imagem[altura, largura] imagem[inicio_y:fim_y, inicio_x:fim_x]

(82)

Cropping

Entendendo o código:

Para realizar o cropping, o Numpy expera receber 4 indexes: - Y inicial: A coordenada y inicial. Neste caso, iniciamos y em 30. - Y final: A coordenada y final. Neste caso, finalizamos o y em 120. - X inicial: A coordenada x inicial. Neste caso, iniciamos o x em 240. - X final: A coordenada x final. Neste caso, finalizamos o x em 335.

(83)

Cropping

(84)

Cropping

Executando o programa:

(85)

Cropping

Executando o programa:

(86)
(87)

Aritmética em imagens

Nós todos sabemos operações básicas de aritmética, como adição

e subtração.

Mas quando trabalhamos com processamento de imagens, nós

precisamos manter em mente os limites do nosso espaço de cores

e tipos de dados.

(88)

Aritmética em imagens

Por exemplo, imagens

R

G

B tem pixels que estão dentro de um

range de [0, 255].

Então o que aconteceria se nós examinássemos um pixel com

intensidade 250 e tentássemos adicionar 10 nele?

(89)

Aritmética em imagens

Por exemplo, imagens

R

G

B tem pixels que estão dentro de um

range de [0, 255].

Então o que aconteceria se nós examinássemos um pixel com

intensidade 250 e tentássemos adicionar 10 nele?

Em aritmética padrão nós teríamos um valor de 260, porém, desde

que imagens

R

G

B são apresentadas como inteiros de 8 bits sem

sinal, 260 não é um valor válido.

(90)

Aritmética em imagens

Então o que deveríamos fazer?

(91)

Aritmética em imagens

Então o que deveríamos fazer?

Realizar uma checagem em todos os pixels para não deixar eles

saírem do range [0, 255], deixando eles com valores mínimos de 0

e máximos de 255?

(92)

Aritmética em imagens

Então o que deveríamos fazer?

Aplicar operação de módulo e arredondar valores? No caso,

adicionando 10 em 250 quando o valor chegar a 255 irá começar a

contagem novamente, resultando em 4 o valor final.

(93)

Aritmética em imagens

Qual seria a forma correta para se tratar isso?

(94)

Aritmética em imagens

Qual seria a forma correta para se tratar isso?

A verdade é que não existe a forma correta. Isso depende de como

estão sendo manipulados os pixels, e qual o resultado que

queremos ter.

(95)

Aritmética em imagens

OBS: Existem diferenças nas formas que o OpenCV e o Numpy

realizam operação de adição nos arrays.

Numpy irá fazer a operação de módulo e deixar adicionar somente

o necessário para não estourar o range.

Já o OpenCV irá chegar cada pixel para não deixar ele estourar o

range.

Apesar de ambos tratarem esses fatores, a diferença entre os

modos pode resultar em diferente performance.

(96)

Aritmética em imagens

Crie o programa aritmetica.py

(97)

Aritmética em imagens

(98)

Aritmética em imagens

(99)

Aritmética em imagens

Entendendo o código:

(100)

Aritmética em imagens

(101)

Aritmética em imagens

Entendendo o código:

Estamos realizando as duas operações: adição e subtração com as bibliotecas OpenCV e Numpy que realizam as mesmas de diferentes formas.

Além de realizarmos as operações estamos utilizando o método print do python para imprimir no console o resultado.

(102)

Aritmética em imagens

Entendendo o código:

Na linha 12, utilizamos o Numpy para criar 2 arrays de inteiros com 8 bits sem sinal. A primeira array possui apenas 1 elemento com valor 200. A segunda array também possui somente 1 elemento com valor 100.

Repare que estamos utilizando o OpenCV para realizar uma operação de soma. Se fizéssemos isso com as regras de aritmética, somar 200 com 100 daria 300. Mas o OpenCV realiza a checagem e não deixa os valores sair e nem passarem do range [0, 255], resultando em 255.

(103)

Aritmética em imagens

Entendendo o código:

Na linha 14, criamos mais 2 arrays, dessa vez com a primeira contendo o valor 50 e a segunda 100.

Repare que estamos utilizando o OpenCV para realizar uma operação de subtração. Se fizéssemos isso com as regras de aritmética, subtrair 100 de 50 daria -50. Mas o OpenCV realiza a checagem e não deixa os valores sair e nem passarem do range [0, 255], resultando em 0.

(104)

Aritmética em imagens

Entendendo o código:

Na linha 16, criamos mais 2 arrays, dessa vez com a primeira contendo o valor 200 e a segunda 100.

Repare que estamos utilizando o Numpy para realizar uma operação de soma. Se fizéssemos isso com as regras de aritmética, somar 200 com 100 daria 300. Mas o Numpy realiza uma operação de módulo e quando o valor chega a 255 ele começa novamente, resultando em 44.

(105)

Aritmética em imagens

Entendendo o código:

Na linha 18, criamos mais 2 arrays, dessa vez com a primeira contendo o valor 50 e a segunda 100.

Repare que estamos utilizando o Numpy para realizar uma operação de subtração. Se fizéssemos isso com as regras de aritmética, subtrair 100 de 50 daria -50. Mas o Numpy realiza uma operação de módulo e quando o valor chega a 0 ele começa novamente, resultando em 206.

(106)

Aritmética em imagens

(107)

Aritmética em imagens

Entendendo o código:

Na linha 20, nós definimos uma array de uns do mesmo tamanho da imagem. Essa array é do tipo inteiro de 8 bits sem sinal. E estamos multiplicando por 100 para trocar os 1s por 100s.

Na linha 21 criamos a imagem resultado da operação com OpenCV da adição da matriz definida na linha 20 na nossa imagem.

(108)

Aritmética em imagens

Entendendo o código:

Na linha 24, nós definimos uma array de uns do mesmo tamanho da imagem. Essa array é do tipo inteiro de 8 bits sem sinal. E estamos multiplicando por 50 para trocar os 1s por 50s.

Na linha 25 criamos a imagem resultado da operação com OpenCV da subtração da matriz definida na linha 24 na nossa imagem.

(109)

Aritmética em imagens

Entendendo o código:

Na linha 28, nós definimos uma array de uns do mesmo tamanho da imagem. Essa array é do tipo inteiro de 8 bits sem sinal. E estamos multiplicando por 100 para trocar os 1s por 100s.

Na linha 29 criamos a imagem resultado da operação com Numpy da soma da matriz definida na linha 28 na nossa imagem.

(110)

Aritmética em imagens

Entendendo o código:

Na linha 32, nós definimos uma array de uns do mesmo tamanho da imagem. Essa array é do tipo inteiro de 8 bits sem sinal. E estamos multiplicando por 50 para trocar os 1s por 50s.

Na linha 33 criamos a imagem resultado da operação com Numpy da subtração da matriz definida na linha 32 na nossa imagem.

(111)

Aritmética em imagens

Executando o programa:

(112)

Aritmética em imagens

Executando o programa:

(113)

Aritmética em imagens

Executando o programa:

(114)
(115)

Operações bitwise

Operações bitwise são conhecidas como operações bit-a-bit que

foram estudadas como AND, OR, XOR e NOT.

Essa técnica para processamento de imagens são utilizadas em

imagens em escala de cinza, transformando cada pixels "on" ou

"off", neste caso alterando seu valor para 0 ou para 1.

(116)

Operações bitwise

Isso quer dizer que um dado pixel é tornado "on" se seu valor é

maior que zero e é tornado "off" se seu valor é zero.

(117)

Operações bitwise

Em ordem de utilizar funções bitwise, nós assumimos, na maioria

dos casos, que estamos comparando dois pixels. A única exceção é

na função NOT.

Nós iremos comparar cada pixel e então construir a representação

bitwise solicitada.

(118)

Operações bitwise

Revisão de operações binárias:

(119)

Operações bitwise

Revisão de operações binárias:

- AND: Uma operação bitwise AND é "true" se, e somente se,

ambos pixels são maiores que zero.

- OR: Uma operação bitwise OR é "true" se qualquer um dos dois

pixels for maior que zero.

- XOR: Uma operação bitwise XOR é "true" se um dos dois pixels

comparados for maior que zero, mas não ambos.

- NOT: Uma operação bitwise NOT inverte os pixels "on" e "off" de

uma imagem.

(120)

Operações bitwise

Crie o programa bitwise.py

(121)

Operações bitwise

(122)

Operações bitwise

(123)

Operações bitwise

Entendendo o código:

(124)

Operações bitwise

(125)

Operações bitwise

Entendendo o código:

Na linha 4 definimos uma matriz de zeros que será nosso retângulo de 300 por 300 pixels.

Na linha 5 utilizamos o método rectangle do OpenCV para definirmos nosso retângulo com preenchendo com a cor branca 250 x 250 pixels. Então apresentamos esse retângulo.

(126)

Operações bitwise

Entendendo o código:

Na linha 8 definimos uma matriz de zeros que será nosso círculo de 300 por 300 pixels.

Na linha 9 utilizamos o método circle do OpenCV para definirmos nosso círculo com 150 pixels de raio, preenchido na cor branca. Então apresentamos esse círculo.

(127)

Operações bitwise

(128)

Operações bitwise

Entendendo o código:

Na linha 12 utilizamos o OpenCV para aplicar a operação bitwise

AND entre o retângulo e o círculo.

(129)

Operações bitwise

Entendendo o código:

Na linha 15 utilizamos o OpenCV para aplicar a operação bitwise OR entre o retângulo e o círculo.

(130)

Operações bitwise

Entendendo o código:

Na linha 18 utilizamos o OpenCV para aplicar a operação bitwise

XOR entre o retângulo e o círculo.

(131)

Operações bitwise

Entendendo o código:

Na linha 21 utilizamos o OpenCV para aplicar a operação bitwise

NOT no círculo.

Na linha 22 apresentamos em tela e na linha 23 esperamos uma tecla ser pressionada para fechar o programa.

(132)

Operações bitwise

Executando o programa:

(133)

Operações bitwise

Executando o programa:

(134)

Operações bitwise

Executando o programa:

(135)

Operações bitwise

Exercício bitwise:

a) Baixe 2 imagens de mesmo tamanho da internet; (300 x 300)

b) Crie um programa que carregue essas duas imagens em escala

de cinza e realize as operações bitwise nas mesmas;

Para criar 2 parâmetros de entrada:

(136)

Operações bitwise

Exercício bitwise:

a) Baixe 2 imagens de mesmo tamanho da internet; (300 x 300)

b) Crie um programa que carregue essas duas imagens em escala

de cinza e realize as operações bitwise nas mesmas;

Para criar 2 parâmetros de entrada:

(137)
(138)

Máscara

Máscara é uma técnica de processamento de imagens

extremamente importante pois nos permite focar em apenas uma

porção da imagem que nos interessa.

Para trabalhar com máscaras era necessário antes entender as

operações bitwise que estudamos a pouco.

(139)

Máscara

Imaginemos que estamos desenvolvendo um systema utilizando

visão computacional para reconhecimento de faces.

As únicas partes de uma imagem que nos interessa são as que

contém faces. Nós simplesmente não devemos nos importar com o

restante da imagem.

O interessante é que para que nós possamos encontrar faces em

uma imagem nós precisamos construir uma máscara para mostrar

somente faces em uma imagem.

(140)

Máscara

(141)

Máscara

(142)

Máscara

(143)

Máscara

(144)

Máscara

(145)

Máscara

Entendendo o código:

Na linha 12 criamos nossa matriz preenchidas de zeros com Numpy, com a mesma largura e altura da imagem original.

Na linha 13 calculamos o centro da imagem.

Na linha 14 utilizamos o OpenCV para criar um retângulo com a nossa máscada e logo na linha abaixo apresentamos a mesma em tela.

(146)

Máscara

Entendendo o código:

Na linha 17 utilizamos o OpenCV para aplicar a máscara na nossa

imagem original, utilizando a operação bitwise estudada anteriormente

AND. Na linha abaixo apresentamos a imagem e aguardamos o

(147)

Máscara

(148)

Máscara

Entendendo o código:

Na linha 21 criamos outra matriz Numpy preenchidas com zeros.

Na linha 22 utilizamos o OpenCV para criar um círculo com a nossa nova máscara. Esse círculo terá 100 pixels de raio.

Na linha 25 aplicamos essa máscara na nossa imagem

(149)

Máscara

(150)

Máscara

Executando o programa:

python mascara.py --imagem beach.png

OBS: Baixe a imagem beach.png

(151)

Máscara

Executando o programa:

(152)
(153)

Divisão e Merge de canais de imagens

Uma imagem colorida consiste em múltiplos canais: Um

componente

Red

(

Vermelho

), um componente Green (Verde) e um

componente Blue (Azul).

Já vimos que conseguimos acessar esses componentes via indexes

com as arrays de Numpy.

Mas e se quisermos dividir uma imagem em relação a cada um dos

seus componentes?

(154)

Divisão e Merge de canais de imagens

Crie o programa split_merge.py

(155)

Divisão e Merge de canais de imagens

Digite o seguinte código no programa split_merge.py:

(156)

Divisão e Merge de canais de imagens

Digite o seguinte código no programa split_merge.py:

(157)

Divisão e Merge de canais de imagens

Entendendo o código:

(158)

Divisão e Merge de canais de imagens

Digite o seguinte código no programa split_merge.py:

(159)

Divisão e Merge de canais de imagens

Entendendo o código:

Na linha 11 estamos utilizando o método split do OpenCV separando os canais da imagem recebida e colocando nas variáveis B, G e R.

Nas linhas 12 a 14 estamos mostrando as imagens separadas dos canais em tela.

(160)

Divisão e Merge de canais de imagens

Entendendo o código:

Na linha 17 estamos utilizando o método merge do OpenCV para juntar novamente os canais em uma só imagem. Abaixo estamos apresentando a imagem e destruindo as telas após uma tecla for pressionada.

(161)

Divisão e Merge de canais de imagens

Entendendo o código:

Na linha 22 estamos criando com Numpy uma matriz preenchidas com zeros do mesmo tamanho da imagem original.

(162)

Divisão e Merge de canais de imagens

Entendendo o código:

Nas linhas 23 a 25 estamos criando uma nova imagem utilizando o merge do OpenCV. Repare que estamos criando uma imagem para cana canal, sendo que estamos preencendo com zeros os canais não utilizados e apresentamos essas imagens na sequência.

(163)

Divisão e Merge de canais de imagens

Executando o programa:

(164)

Divisão e Merge de canais de imagens

Executando o programa:

python split_merge.py --imagem waves.png

(165)

Divisão e Merge de canais de imagens

Executando o programa:

python split_merge.py --imagem waves.png

(166)

Divisão e Merge de canais de imagens

Executando o programa:

python split_merge.py --imagem waves.png

(167)
(168)

Espaço de cores

Até então temos trabalhado com o espaço de cores

R

G

B

;

Em todo caso, existem diversos outros espaços de cores.

(169)

Espaço de cores

O espaço de cor Hue-Saturation-Value (HSV) é conhecido por ser

mais similar como os humanos pensam e concebem cores.

Já o espaço de cor L*a*b* está mais para "como" os humanos

percebem as cores.

Em todo o caso, o OpenCV provê suporte para muitos espaços de

cores. E vamos conhecer agora como utilizar alguns deles.

(170)

Espaço de cores

Crie o programa color_space.py

(171)

Espaço de cores

(172)

Espaço de cores

(173)

Espaço de cores

Entendendo o código:

(174)

Espaço de cores

(175)

Espaço de cores

Entendendo o código:

Na linha 12 estamos utilizando o método cvtColor do OpenCV para converter o espaço de cores da imagem de RGB para

(176)

Espaço de cores

Entendendo o código:

Na linha 15 estamos utilizando o método cvtColor do OpenCV para converter o espaço de cores da imagem de RGB para

(177)

Espaço de cores

Entendendo o código:

Na linha 18 estamos utilizando o método cvtColor do OpenCV para converter o espaço de cores da imagem de RGB para

(178)

Espaço de cores

Executando o programa:

(179)

Espaço de cores

Executando o programa:

(180)

Espaço de cores

Executando o programa:

(181)

Processamento Digital de Imagens

Aula 04 Prof. Diemesleno Souza Carvalho diemesleno@iftm.edu.br

(182)

OBS

Vimos diversos tópicos no conteúdo desta aula. Em cada um dos tópicos fizemos um ou mais exemplos sempre explicando cada linha do código.

(183)

Exercício

1) Para cada tópico abordado, baixe novas imagens, crie novas imagens utilizando o Numpy com Zeros ou Uns, misture os tópicos para fixar o que foi abordado.

Referências

Documentos relacionados

Desta forma, existem benefícios para os clientes que possuem melhores controles internos, como, agilidade na elaboração dos demonstrativos contábeis e até mesmo

Com a apresentação deste cenário, a contribuição da investigação se valida em importância, visto que oferece uma via de acesso para o ensino de geociências contemplando a

Portanto, a intenção deste trabalho é buscar o conhecimento acerca dos aceleradores escolhidos para realização dos testes, comparando o seu desempenho, velocidade e

Este artigo descreve a atividade antiviral de dois extratos etanólicos de própolis de duas diferentes origens frente ao adenovírus canino tipo 2 CAV-2, calicivírus felino FCV e vírus

uma forma eficiente de realizar a interseção entre duas esferas e duas cascas esféricas no R 3 , desejamos investigar o efeito de acrescentarmos mais uma casca esférica extra

Após, consegui contrato pelo estado e fui trabalhar em São Vendelino, em um grupo escolar com um quinto ano, tendo 36 alunos, sendo que dois alunos eram mais

A turma deverá formar uma comissão de formatura e elaborar uma ata, com a data da eleição, o nome do curso, turnos e a matrícula dos componentes com seus devidos cargos, além

Consulte a Secção 11 para obter informações pormenorizadas sobre sintomas e efeitos na saúde.. Classificação conforme Regulamentação (EC) 1272/2008 [CLP/GHS] SECÇÃO