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:
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
Postar um comentário