O código a seguir, cria filtros para uma imagem para dar um ar de imagem envelhecida, o primeiro cria ruídos na imagem, o segundo deixa a imagem em tons de cinza, o terceiro deixa a imagem avermelhada, e o ultimo deixa a imagem amarelada, a seguir sera explicado como cada filtro atua.
Ruido: A variável pos guarda o numero de pixels da imagem original que foi copiada, um numero randômico de inteiro de 0 até pos-1 é gerado para indicar um pixel da imagem, e nesse pixel é adicionado 16 a cada canal, esse numero pode ser ajustado. o numero de passos para o laços pode ser controlado, aumentando ou diminuído o numero de pixel a serem alterados, no exemplo o numero de passos é 100000.
Cinza: Baseado na percepção das cores pelo ser humano cada cor da image, é multiplicado por um valor que representa a porcentagem de percepção que o ser humano tem daquela cor, depois uma variável media soma todos os canais já multiplicados, tendo assim a média ponderada das cores, e em todos os canais da imagem resultante a variável media é setada, resultando na imagem em tons de cinza.
Vermelho: O filtro a seguir copia as cores G e B para a imagem resultante, e adiciona 64 ao canal R e copia para imagem resultante.,
Amarelo: Esse filtro é bem parecido com o ultimo, só que para adicionar amarelo, é necessário adicionar valor nos canais vermelho e verde.
Código-Fonte:
PImage img;
PImage imgRuido;
PImage imgCinza;
PImage imgRed;
PImage imgYellow;
float media,r,b,g;
int pos;
void setup(){
size(800,600);
img = loadImage("opa.jpg");
imgRuido = createImage(640,447,RGB);
imgCinza = createImage(640,447,RGB);
imgRed = createImage(640,447,RGB);
imgYellow = createImage(640,447,RGB);
for (int x=0; x<640; x++) {
for (int y=0; y<447; y++) {
pos=y*640+x;
imgRuido.pixels[pos] = img.pixels[pos];
imgRed.pixels[pos] = img.pixels[pos];
}
}
//Ruido
int p =0;
for (int i=0; i<100000; i++) {
p = (int)random(0,pos-1);
r=red(imgRuido.pixels[p])+16;
g=green(imgRuido.pixels[p])+16;
b=blue(imgRuido.pixels[p])+16;
imgRuido.pixels[p] = color(r,g,b);
imgCinza.pixels[p] = color(r,g,b);
}
//Cinza
for (int x=0; x<640; x++) {
for (int y=0; y<447; y++) {
pos=y*640+x;
r=red(imgRuido.pixels[pos])*0.3;
g=green(imgRuido.pixels[pos])*0.59;
b=blue(imgRuido.pixels[pos])*0.11;
media = r+g+b;
imgCinza.pixels[pos] = color(media,media,media);
}
}
//Vermelho
for (int x=0; x<640; x++) {
for (int y=0; y<447; y++) {
pos=y*640+x;
r=red(imgCinza.pixels[pos])+64;
g=green(imgCinza.pixels[pos]);
b=blue(imgCinza.pixels[pos]);
imgRed.pixels[pos] = color(r,g,b);
}
}
//Amarelo
for (int x=0; x<640; x++) {
for (int y=0; y<447; y++) {
pos=y*640+x;
r=red(imgRed.pixels[pos])+64;
g=green(imgRed.pixels[pos])+64;
b=blue(imgRed.pixels[pos]);
imgYellow.pixels[pos] = color(r,g,b);
}
}
}
void draw() {
//image(img,0,0);
//image(imgRuido,0,0);
//image(imgCinza,0,0);
//image(imgRed, 0, 0);
image(imgYellow,0,0);
}
Nenhum comentário:
Postar um comentário