Skip to content

Instantly share code, notes, and snippets.

@edmorais
Created May 10, 2016 14:46
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save edmorais/d4437bf5d33d73414e78f46b456b6d83 to your computer and use it in GitHub Desktop.
Save edmorais/d4437bf5d33d73414e78f46b456b6d83 to your computer and use it in GitHub Desktop.
Processa imagem da webcam, mostrando a localização do pixel mais brilhante
/*_ ___ ___ ___ __ _ __
| | / __|_ _|_ ) \/ |/ /
| |__\__ \| | / / () | / _ \
|____|___/___/___\__/|_\___/
Aula de 9/5/2016:
Processa imagem da webcam, mostrando a localização do ponto mais brilhante
Por Eduardo Morais / FBAUP - www.eduardomorais.pt/fbaup/
*/
/*
Importa biblioteca de vídeo
(instalar via menu Sketch -> Import Library -> Add Library -> Pesquisar 'Video'):
*/
import processing.video.*;
/*
Declarações de variáveis:
*/
Capture camara; // declaramos o objecto do tipo Capture (webcam)
int record_p = 0; // posição com o ponto mais luminoso
float record_v = 0; // valor do ponto mais luminoso
/*
Função setup():
Executada automaticamente no início do programa:
*/
void setup() {
size(640, 480);
background(0);
ellipseMode(CENTER);
noFill();
stroke(#FF0000);
strokeWeight(5);
// iniciamos uma nova captura com as dimensões VGA (640 x 480):
camara = new Capture(this, 640, 480);
camara.start(); // ligamos a câmara
}
/*
Função draw():
Executada repetidamente a cada 'frame'/fotograma de animação.
*/
void draw() {
record_v = 0; // volta a 0 o valor mais luminoso encontrado
if (camara.available()) {
// Se a câmara tiver um novo fotograma disponível:
camara.read(); // lê a imagem da câmara
image(camara, 0, 0); // mostra a imagem nas coordenadas 0,0
// Vamos carregar o array camara.pixels[] com a imagem da câmara.
// Agora podemos aceder a cada um dos pixels:
camara.loadPixels();
for (int i = 0; i < camara.pixels.length; i++) {
// percorremos todos os pixels da imagem, e para cada um...
if (brightness(camara.pixels[i]) >= record_v) {
// se esse pixel for mais ou tão brilhante como o valor mais elevado
// até esse momento, temos um novo valor recorde:
record_v = brightness(camara.pixels[i]);
// e registamos a posição onde o encontrámos:
record_p = i;
}
}
println(record_p); // mostramos a posição na consola
/*
Queremos desenhar um círculo na posição do valor mais brilhante.
Para tal precisamos de saber a que coordenadas x,y corresponde esse valor de posição.
Uma divisão inteira pela largura da imagem dá-nos o Y,
enquanto uma operação de modulo (resto dessa divisão, '%') nos dá o X:
*/
int y = record_p / camara.width;
int x = record_p % camara.width;
ellipse(x, y, 30, 30);
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment