Created
May 10, 2016 14:46
-
-
Save edmorais/d4437bf5d33d73414e78f46b456b6d83 to your computer and use it in GitHub Desktop.
Processa imagem da webcam, mostrando a localização do pixel mais brilhante
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/*_ ___ ___ ___ __ _ __ | |
| | / __|_ _|_ ) \/ |/ / | |
| |__\__ \| | / / () | / _ \ | |
|____|___/___/___\__/|_\___/ | |
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