videoGrabber get pixel colors

hi, im trying to take the video of the webcam and get the colors of all the pixels and change them to black and just stay the white color, for have some kind of figure of the body. But i have some problems, i think that is for the rgb, or something that im not counting.

the code:
ofApp.h:
#pragma once

#include “ofMain.h”

class ofApp : public ofBaseApp{

public:
	void setup();
	void update();
	void draw();
	//void exit();

	
	 
	ofVideoGrabber webcam; //inicializo la camara q es la webcam
	unsigned char* changeVideoData; 
	ofPixels pixelData;
	ofTexture pixelTexture;
	int camWidth, camHeight;  //valores de ancho y alto de la camara.

};

ofApp.cpp:

#include “ofApp.h”

//--------------------------------------------------------------
void ofApp::setup(){
ofBackground(0); //color fondo

camWidth = 640;  //ancho de la cam
camHeight = 480; //alto de la cam
webcam.setVerbose(true); 
webcam.setup(camWidth, camHeight); //inicializa la cam en con los parametros de camWidth y camHeight

changeVideoData = new unsigned char[camWidth * camHeight * 3];
pixelTexture.allocate(camWidth, camHeight, GL_RGB);

}

//--------------------------------------------------------------
void ofApp::update(){

webcam.update();

if (webcam.isFrameNew()) { //si la cam esta tomando los datos actuales
	unsigned char* pixelData = webcam.getPixels().getData();    //toma pixeles de la imagen y la data 
}

int totalPixels = camWidth * camHeight * 3; //total de pixeles de la camara + rgb

for (int i = 0; i < totalPixels; i+= 3) {
	if (changeVideoData[i] == 250 ) changeVideoData[i] = 255;
	else  changeVideoData[i] = 0;
}
 pixelTexture.loadData(changeVideoData, camWidth, camHeight, GL_RGB);

}

//--------------------------------------------------------------
void ofApp::draw(){
//webcam.draw(0,0,1393 ,710); //dibuja la cam
pixelTexture.draw(0,0,1360,730);
}

Hola creo q si entendi bien quieres sacar o solo detectar el blanco como movimiento ?
podrias usar algo asi
float brightness = ofMap(c.getBrightness(), 0, 255, -0.0, 255);

holis, mm claro quería hacer algo asi, pero tambien quiero que todo lo demas sea negro :/, tengo que crear una obra interactiva para un tp y estaba probando cambiar el color blanco con el sonido que toma de un microfono. Entonces primero debo llevar el video de colores a blanco y negro y luego tomar el valor blanco para generar diferencia de colores. Pero con lo que mande se me pone la pantalla toda en negro o toda en blanco jsdja .
Por otra parte, donde se supone que debería de poner eso? y el “c” que sería?
Recien estoy aprendiendo a usar oF :c

el c era una variable antes definida con ofColor miralo aqui creo q lo q quiere hacer es sacar el contorno de la imagen cuando se mueve si es eso necesitas usar opencv o ofxCV cmo aqui openFrameworks tutorial series - episode 040 - ofxCv - YouTube

mm no no es eso lo que quiero hacer, sino más bien esto :


pero en vez de que sea con una imagen, que sea con la camara.
Lo tengo q presentar mañana en la uni xd, no creo tener el suficiente tiempo y no encuentro tutoriales buenos en youtube. La idea es poner una tela negra en toda la parte del fondo y cubrir a la persona con un traje blanco. entonces intentaría generar ese efecto “treshold” lo más posible y luego poder cambiar los valores blancos a colores random segun la entrada de audio :frowning: solo quiero aprobar esta materia que me esta sacando las ganas de vivir :,o

#include “ofApp.h”

//--------------------------------------------------------------
void ofApp::setup(){
ofBackground(0); //color fondo

camWidth = 640;  //ancho de la cam
camHeight = 480; //alto de la cam
webcam.setVerbose(true); 
webcam.setup(camWidth, camHeight); //inicializa la cam en con los parametros de camWidth y camHeight

changeVideoData = new unsigned char[camWidth * camHeight * 3];
pixelTexture.allocate(camWidth, camHeight, GL_RGB);

}

//--------------------------------------------------------------
void ofApp::update(){

webcam.update();

if (webcam.isFrameNew()) { //si la cam esta tomando los datos actuales
	unsigned char* pixelData = webcam.getPixels().getData();    //toma pixeles de la imagen y la data 
}

int totalPixels = camWidth * camHeight * 3; //total de pixeles de la camara + rgb
ofColor c;

for (int i = 0; i < totalPixels; i++) {
	if (changeVideoData[i] >= 250 ) float brightness = ofMap(c.getBrightness(), 0, 255, -0.0, 255);
	else  changeVideoData[i] = 0 ;
}
 pixelTexture.loadData(changeVideoData, camWidth, camHeight, GL_RGB);

}

//--------------------------------------------------------------
void ofApp::draw(){
//webcam.draw(0,0,1393 ,710); //dibuja la cam
pixelTexture.draw(0,0,1360,730);
}

hice eso pero sigue sin funcionar, me pone la pantalla toda negra o toda gris :confused:

changeVideoData is still empty inside totalPixels loop
you have your pixels loaded in pixelData instead

lo que quieres es observar la claridad de cada pixel, y si ultrapasa un limiar se pone blanco o negro.