Hey guys,
I’m trying the get pixel value from a grayscale image. I am also trying to count the number of white pixels in that image. I understand that i have to use a nested for loop to go through the image and also use the getPixels function. However, i do not understand how i have to structure this. Could someone help me out?
thanks
Here is the snipet of code for finding white pixels in an image
void testApp::draw(){
ofSetColor(255, 255, 255);
myPicture.draw(0,0);
unsigned char * pixels = myPicture.getPixels();
int counter = 0;
for(int i = 0; i < myPicture.width*myPicture.height; i++){
if (pixels[i] > 250){
counter ++;
}
}
printf("num white pixels= %i \n", counter);
}
1 Like
Have a look at the ImageLoadedExample that comes with the OF package.
unsigned char * pixels = bikeIcon.getPixels();
int w = bikeIcon.width;
int h = bikeIcon.height;
for (int i = 0; i < w; i++){
for (int j = 0; j < h; j++){
int value = pixels[j * w + i];
float pct = 1 - (value / 255.0f);
ofCircle(i*10,500 + j*10,1 + 5*pct);
}
}
For colour images, you will need to use a slightly different index on the array:
int w = myImage.width;
int h = myImage.height;
int type = myImage.type;
int bpp = myImage.bpp / 8;
unsigned char * pixels = myImage.getPixels();
for (int i = 0; i < w; i++){
for (int j = 0; j < h; j++){
if(bpp >= 3){
float cRed = pixels[(j*w+i)*bpp+0];
float cGreen = pixels[(j*w+i)*bpp+1];
float cBlue = pixels[(j*w+i)*bpp+2];
if(bpp >= 4)
float cAlpha = pixels[(j*w+i)*bpp+3];
}
else if(bpp == 1){
float cGray = pixels[(j*w+i)];
}
}
}
HTH!
-plong0
and be aware that the getPixels() returns the R,G,B values separate. (one pixel will return 3 indexes).