Processamento Digital de Imagens
Aula 04 Prof. Diemesleno Souza Carvalho diemesleno@iftm.edu.br
Na aula passada vimos...
Unidade III
- Desenhando;
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.
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.
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.
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.
Translação
Translação
Translação
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.
Translação
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.
Translação
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.
Translação
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.
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.
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).
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.
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.
Translação
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
Translação
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).
Translação
Executando o código:
Translação
Executando o código:
Translação
Executando o código:
Rotação
Rotação é a técnica para processamento de imagens que
rotaciona a imagem de acordo com o ângulo informado.
Rotação
Rotação
Rotação
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.
Rotação
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
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.
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.
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.
Rotação
Rotação
Executando o programa:
Rotação
Executando o programa:
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.
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.
Redimensionamento
Crie o programa redimensionamento.py
Redimensionamento
Redimensionamento
Redimensionamento
Entendendo o código:
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.
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.
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.
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
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
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.
Redimensionamento
Executando o programa:
Redimensionamento
Executando o programa:
Redimensionamento
Executando o programa:
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.
Flipping
Flipping
Flipping
Flipping
Entendendo o código:
Nada de novo, mas estamos fazendo menos importe neste programa.
Flipping
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.
Flipping
Flipping
Executando o programa:
Flipping
Executando o programa:
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.
Cropping
Cropping
Cropping
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.
Cropping
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]
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.
Cropping
Cropping
Executando o programa:
Cropping
Executando o programa:
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.
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?
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.
Aritmética em imagens
Então o que deveríamos fazer?
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?
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.
Aritmética em imagens
Qual seria a forma correta para se tratar isso?
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.
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.
Aritmética em imagens
Crie o programa aritmetica.py
Aritmética em imagens
Aritmética em imagens
Aritmética em imagens
Entendendo o código:
Aritmética em imagens
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.
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.
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.
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.
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.
Aritmética em imagens
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.
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.
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.
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.
Aritmética em imagens
Executando o programa:
Aritmética em imagens
Executando o programa:
Aritmética em imagens
Executando o programa:
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.
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.
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.
Operações bitwise
Revisão de operações binárias:
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.
Operações bitwise
Crie o programa bitwise.py
Operações bitwise
Operações bitwise
Operações bitwise
Entendendo o código:
Operações bitwise
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.
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.
Operações bitwise
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.
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.
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.
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.
Operações bitwise
Executando o programa:
Operações bitwise
Executando o programa:
Operações bitwise
Executando o programa:
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:
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:
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.
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.
Máscara
Máscara
Máscara
Máscara
Máscara
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.
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
Máscara
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
Máscara
Máscara
Executando o programa:
python mascara.py --imagem beach.png
OBS: Baixe a imagem beach.png
Máscara
Executando o programa:
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?
Divisão e Merge de canais de imagens
Crie o programa split_merge.py
Divisão e Merge de canais de imagens
Digite o seguinte código no programa split_merge.py:
Divisão e Merge de canais de imagens
Digite o seguinte código no programa split_merge.py:
Divisão e Merge de canais de imagens
Entendendo o código:
Divisão e Merge de canais de imagens
Digite o seguinte código no programa split_merge.py:
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.
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.
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.
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.
Divisão e Merge de canais de imagens
Executando o programa:
Divisão e Merge de canais de imagens
Executando o programa:
python split_merge.py --imagem waves.png
Divisão e Merge de canais de imagens
Executando o programa:
python split_merge.py --imagem waves.png
Divisão e Merge de canais de imagens
Executando o programa:
python split_merge.py --imagem waves.png
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.
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.
Espaço de cores
Crie o programa color_space.py
Espaço de cores
Espaço de cores
Espaço de cores
Entendendo o código:
Espaço de cores
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
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
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
Espaço de cores
Executando o programa:
Espaço de cores
Executando o programa:
Espaço de cores
Executando o programa:
Processamento Digital de Imagens
Aula 04 Prof. Diemesleno Souza Carvalho diemesleno@iftm.edu.br
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.
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.