Hi, forgive me in advance if this is a dumb question to be asking, but i'm pretty new to the world of coding and i'm pretty much teaching myself from scratch.
Anyway, i have been playing around with Golan Levin's Frame Differencing sketch, and have altered it so that it displays the difference image on to a jpg, png ect. I have been trying to move this is on a bit by making the difference image transparent, so instead of displaying altered colour those difference area's would simply be transparent pixels. Unfortunately i have exhausted my limited abilities in trying to figure out why the alpha transparency doesn't change even though the colour does:
[code]
import codeanticode.gsvideo.*;
int numPixels;
int[] previousFrame;
// passondiff is where the video capture difference image is being saved
int[] passondiff;
// is the revised version of the difference image that should have black pixels that are transparent
int[] passondiffnoblack;
int movementSum = 0;
int noblackA = 0;
GSCapture video;
PImage img;
void setup() {
size(640, 480);
background(0, 0, 255);
img = loadImage("knightsmall.png");
img.format = ARGB;
video = new GSCapture(this, width, height);
video.start();
numPixels = img.width * img.height;
previousFrame = new int[numPixels];
passondiff = new int[numPixels];
passondiffnoblack = new int[numPixels];
loadPixels();
}
void draw() {
if (video.available()) {
video.read();
video.loadPixels();
int movementSum = 0;
for (int i = 0; i < numPixels; i++) {
color currColor = video.pixels[i];
color prevColor = previousFrame[i];
int currR = (currColor >> 16) & 0xFF;
int currG = (currColor >> 8) & 0xFF;
int currB = currColor & 0xFF;
int prevR = (prevColor >> 16) & 0xFF;
int prevG = (prevColor >> 8) & 0xFF;
int prevB = prevColor & 0xFF;
int diffR = abs(currR - prevR);
int diffG = abs(currG - prevG);
int diffB = abs(currB - prevB);
movementSum += diffR + diffG + diffB;
passondiff[i] = color(diffR, diffG, diffB);
previousFrame[i] = currColor;
}
for (int x = 0; x < img.width; x++) {
for (int y = 0; y < img.height; y++) {
int dif = x + y*img.width;
// extract the colours from the difference image
color noblack = passondiff[dif];
int noblackR = (noblack >> 16) & 0xFF;
int noblackG = (noblack >> 8) & 0xFF;
int noblackB = noblack & 0xFF;
// if the pixels colour is black then sent the alpha channel
// too 0
if(noblackR == 0 || noblackG == 0 || noblackB == 0){
int noblackA = 0;
}
// if its not black set it too 255
else {
int noblackA = 255;
}
passondiffnoblack[dif] = color (noblackR, noblackG, noblackB, noblackA);
}
}
for (int x = 0; x < img.width; x++) {
for (int y = 0; y < img.height; y++) {
int loc = x + y*img.width;
color imgColor = img.pixels[loc];
color thediff = passondiffnoblack[loc];
// extract the colour values of the jpg
int imgR = (imgColor >> 16) & 0xFF;
int imgG = (imgColor >> 8) & 0xFF;
int imgB = imgColor & 0xFF;
int imgA = (imgColor >> 24) & 0xFF;
//extract the updated colours of the difference image
int diffR = (thediff >> 16) & 0xFF;
int diffG = (thediff >> 8) & 0xFF;
int diffB = thediff & 0xFF;
int diffA = (thediff >> 24) & 0xFF;
// subtract the difference image from the jpg to get aa new difference image
int imgdiffR = abs(imgR - diffR);
int imgdiffG = abs(imgG - diffG);
int imgdiffB = abs(imgB - diffB);
int imgdiffA = abs(imgA - diffA);
pixels[loc] = color(imgR, imgG, imgB, imgdiffA);
}
}
if (movementSum > 0) {
updatePixels();
println(movementSum);
}
}
}
[/code]
I thought subtracting the non- transparent pixels (255) of the difference image from the non-transparent pixels of the png (255) would leave me with a transparent section where there meeting but obviously this not working and i cant think for the life of me why exactly it's not, so any input on this would much appreciated.
1