Video with matching color
in
Core Library Questions
•
7 months ago
Hi. I'm doing a sort of marker system with colors. So i assign a video to a color got from camera, If i press '0' when my webcam see a color the program plays the corrisponding video. My problem is: if I change the color, video changes too, but sound remains. Should I divide audio files from video files, or there is another way?
Ps. Sry for my english :p
Ps. Sry for my english :p
- import processing.video.*;
Movie[] Parte = new Movie[5];
int xStart;
int yStart;
Capture cam;
float threshold = 10; // soglia
color red, yellow, green, blue;
void setup()
{
size(640, 480);
tint(255, 20);
Parte[1] = new Movie(this, "Parte1.mp4");
Parte[2] = new Movie(this, "Parte2.mp4");
Parte[3] = new Movie(this, "Parte3.mp4");
Parte[4] = new Movie(this, "Parte4.mp4");
cam = new Capture(this, 640, 480);
cam.start();
xStart = width / 2 - 100;
yStart = height / 2 - 100;
}
boolean matchColors(color c1, color c2) //sottrae c1 (c1 è il colore che noi abbiamo definito in partenza con il get color. metto un foglio rosso davanti allo schermo
//faccio getcolor, e definisco quel colore come rosso) a c2 ( la seconda volta che passo il foglio il computer memorizza c2 e verifica se il foglio è rosso mi dirà che è rosso true, sennò fause)
{
float diffRed = abs(red(c1) - red(c2));
float diffGreen = abs(green(c1) - green(c2));
float diffBlue = abs(blue(c1) - blue(c2));
if (diffRed < threshold && diffGreen < threshold && diffBlue < threshold) // se la differenza è minore della soglia, considera come se fosse lo stesso colore
//se invece anche solo 1 dei 3 colori è maggiore della soglia, lo considera un colore diverso
return true;
else
return false;
}
color getColor()
{
color current;
int totalRed = 0;
int totalGreen = 0;
int totalBlue = 0;
int pixelCount = 0;
loadPixels();
for (int x = 1; x < 201; x++)
{
for (int y = 1; y < 201; y++)
{
current = pixels[xStart + x + (yStart + y) * width];
totalRed += red(current);
totalGreen += green(current);
totalBlue += blue(current);
pixelCount++;
// pixels[xStart + x + (yStart + y) * width] = color(255, 255, 255);
}
}
updatePixels();
return color(totalRed / pixelCount, totalGreen / pixelCount, totalBlue / pixelCount);
}
void movieEvent(Movie Parte) {
Parte.read();
}
//calibrazione
void draw()
{
if (cam.available() == true)
cam.read();
set(0, 0, cam);
/*noFill();
rect(xStart, yStart, 201, 201);
strokeWeight(1);
stroke(255, 0, 0);*/
if (keyPressed) {
if (key == 'r') {
red = getColor();
}
else if (key == 'g') {
green = getColor();
}
else if (key == 'y') {
yellow = getColor();
}
else if (key == 'b') {
blue = getColor();
}
}
if (keyPressed)
{
if (key == 'R') {
if (matchColors(getColor(), red))
println("Is red!");}
if (key == 'G') {
if (matchColors(getColor(), green))
println("Is green!");}
if (key == 'Y') {
if (matchColors(getColor(), yellow))
println("Is yellow!");}
if (key == 'B') {
if (matchColors(getColor(), blue))
println("Is blue!");}
}
//The Saga of Biorn
if (key == '0') {
if (cam.available() == true)
cam.read();
{
if (matchColors(getColor(), red)){
println("i'm awesome");
Parte[1].play();
set(100, 100, Parte[1]);
background (0);}
}
if (matchColors(getColor(), green)){
println("i'm awesome");
Parte[3].play();
set(0, 0, Parte[3]);
}
if (matchColors(getColor(), blue)){
println("i'm awesome");
Parte[4].play();
set(0, 0, Parte[4]);
}
if (matchColors(getColor(), yellow)){
println("i'm awesome");
Parte[2].play();
set(0, 0, Parte[2]);
}
else print("I failed");
}
}
1