You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

68 lines
2.1 KiB

int cellSize = 20;
int cols = videoWidth / cellSize;
int rows = videoHeight / cellSize;
int cellN = (cols)*(rows);
int[] colorValues = {0, 0, 0, 0, 0, 0, 0, 0};
byte[] colorByteValues = {0, 0, 0, 0, 0, 0, 0, 0};
int colorsN = colorValues.length;
float colorsRange = float(100)/float(colorsN-2);
void ephPercentage() {
if (video.available()) {
video.read();
video.loadPixels();
for(int i = 0; i<colorsN; i++) {
colorValues[i] = 0;
}
for (int i = 0; i < cols; i++) {
for (int j = 0; j < rows; j++) {
int x = i*cellSize;
int y = j*cellSize;
int loc = (video.width - x - 1) + y*video.width; // Reversing x to mirror the image
// Get hue and brightness values
float hueVal = constrain(hue(video.pixels[loc]),0,100);
float briVal = constrain(brightness(video.pixels[loc]),0,100);
float satVal = constrain(saturation(video.pixels[loc]),0,100);
// Set pixel color
color c = color(hueVal, satVal, briVal);
// Check brightness values,
// if greater then 80% increace white counter,
// if lower then 20% increace black counter,
// otherwise increase color counters
if(briVal > 20 && briVal < 80) {
colorValues[constrain(int(hueVal/colorsRange),0,colorsN-3)]++;
} else if(briVal <= 20) {
colorValues[colorsN-2]++;
} else if(briVal >= 80) {
colorValues[colorsN-1]++;
}
pushMatrix();
translate(x+cellSize/2, y+cellSize/2);
rectMode(CENTER);
fill(c);
noStroke();
rect(0, 0, cellSize+6, cellSize+6);
popMatrix();
}
}
// Print colors percentage values
for(int i = 0; i<colorsN-2; i++) {
fill(color((i*colorsRange), 100, 100));
rect(0, (i*5)+5, map(colorValues[i]/(cellN/100),0,100,0,width), 5);
}
fill(0);
rect(0, 5*(colorsN-2)+5, map(colorValues[colorsN-2]/(cellN/100),0,100,0,width), 5);
fill(100);
rect(0, 5*(colorsN-1)+5, map(colorValues[colorsN-1]/(cellN/100),0,100,0,width), 5);
}
}