Pular para o conteúdo principal

Aula 18 - Envelhecimento

Separei as funções em partes - desaturar, addRed, addYellow e addRuido.

Desaturar recolore o pixel na media ponderada de suas cores primarias, gerando tons de cinza.

addRed incrementa a quantidade de vermelho na imagem, encapsulando os valores para não haver estouro de cor.

O mesmo acontece para addYellow, só que é adicionado vermelho e verde.

O addRuido foi um pouco complicado, principalmente colocando ele em um draw, pois como colore pixels em preto e branco seguindo uma regra aleatória, ele se modifica constantemente no loop.

Os slidebars controlam a quantidade de vermelho e amarelo na imagem. Utilizei a biblioteca do ControlP5 para fazer a GUI.

Código:


import controlP5.*;
ControlP5 cp5;
PImage imgOriginal, imgDesaturar, imgRuido, imgRed, imgYellow;
int pos;
int cinza, amarelo, vermelho;
int ruido, ultRuido;
void setup()
{
  cp5 = new ControlP5(this);
  size(320,320);
  imgOriginal = loadImage("original.jpg"); 
  image(imgOriginal, 0, 0); 
  cinza = 100;
    
  cp5.addSlider("amarelo")
  .setPosition(5,270)
  .setRange(0,50)
  .setWidth(240)
  ;
  
  cp5.addSlider("vermelho")
  .setPosition(5,290)
  .setRange(0,50)
  .setWidth(240)
  ;
  
}

void draw()
{ 
   loadPixels();
      for(int x = 0; x<320; x++)
      {
        for(int y = 0; y< 240; y++)
        {
          pos = y*320+x;
          pixels[pos]  = imgOriginal.pixels[pos];
              desaturar();
              addRuido(60);
              addRed(vermelho);
          addYellow(amarelo);
          
        }
      }
  updatePixels();
}



void addRuido(int pop) //salt n pepper
{
  pop = 100 - pop;
  if(pop == 100)
    return;
  float aleat;
  aleat = int(random(0,1000));
  if(aleat % pop == 0)
    if(random(1) < 0.5)
      pixels[pos] = color(0,0,0);
    else
      pixels[pos] = color(255,255,255);
    
}

void desaturar()
{
  float red,blue,green,media;
  red = red(imgOriginal.pixels[pos]);
  green = green(imgOriginal.pixels[pos]);
  blue = blue(imgOriginal.pixels[pos]);
  media = 0.3*red+0.59*green+0.11*blue;
  pixels[pos] = color(media,media,media); 
}

void addRed(int qtde){
  if(qtde < 0)
    qtde = 0;
  float media = red(pixels[pos]);
  float soma = qtde + media;
  if(soma> 255)
    soma = 255;
    
 pixels[pos] = color(soma,media,media);
  
}

void addYellow(int qtde){
  if(qtde < 0)
    qtde = 0;
  float media = blue(pixels[pos]);
  float red = red(pixels[pos]);
  float somaG = qtde + media;
  float somaR = qtde + red;
  
  if(somaG> 255)
    somaG = 255;
  
  if( somaR > 255)
    somaR= 255;
    
  pixels[pos] = color(somaR,somaG,media);
  
}

void envelhecer(int red, int yellow, int pop){
   loadPixels();
  for(int x = 0; x<320; x++)
  {
    for(int y = 0; y< 240; y++)
    {
      pos = y*320+x;
      pixels[pos]  = imgOriginal.pixels[pos];
      desaturar();
      
      addYellow(yellow);
      
      addRuido(pop);
      addRed(red);
      
    }
  }
  updatePixels();
}

Comentários

Postagens mais visitadas deste blog

Atividade 4 - Flores - MAMi

Baixar:https://onedrive.live.com/redir?resid=14FE8517019EBC9B!8755&authkey=!ADnkZrr6bjNc1do&ithint=file%2cpde Primeiro, vamos observar a imagem dada: Compõe de 5 círculos de raio r, todos tangenciando o circulo central. Vamos repartir o problema em uma parte menor: Obs.: O ponto (0,0) foi transladado para o ponto A. Percebemos que a hipotenusa do triangulo ABC é o diâmetro do círculo, e que o ponto C (a origem do circulo) se afastou do ponto A; Verticalmente (segmento AB): Horizontalmente (segmento BC): Como a origem foi transladada, deve-se somar as posições X e Y do ponto A, mudando a formula para A+diâmetro * sen θ e A+ diâmetro * cos θ . Mas onde os outros círculos estarão? Simples. Em relação ao circulo C, os outros círculos estão defasados em π radianos uns dos outros. Abaixo, a aplicação. Desenha 100 flores de raios, posições e tons aleatórios.

Trabalho parte 1- MAMi

Baixar: https://onedrive.live.com/redir?resid=14FE8517019EBC9B!8768&authkey=!AHVEAvL6v0vq43k&ithint=file%2cpde O Artista que escolhi para o trabalho foi Waldemar Cordeiro e sua serie foi: Estrutura Determinada e Determinante + Arte de 1958. As duas foram escolhidas pela sua similaridade.