Pregunta

Quiero encontrar el área no blanca de una imagen de una cámara usando OpenCV. Ya puedo encontrar círculos usando imágenes de mi cámara web. Quiero hacer una cuadrícula o algo para poder determinar que el porcentaje de la imagen no es blanco. ¿Alguna idea?

¿Fue útil?

Solución

Si desea encontrar el porcentaje de píxeles en su imagen que no es blanco, ¿por qué no cuenta todos los píxeles que no son blancos y los divide por el número total de píxeles en la imagen?

Código en C

#include <stdio.h>
#include <cv.h>
#include <cxcore.h>
#include <highgui.h>

int main()
{
    // Acquire the image (I'm reading it from a file);
    IplImage* img = cvLoadImage("image.bmp",1);

    int i,j,k;
    // Variables to store image properties
    int height,width,step,channels;
    uchar *data;
    // Variables to store the number of white pixels and a flag
    int WhiteCount,bWhite;

    // Acquire image unfo
    height    = img->height;
    width     = img->width;
    step      = img->widthStep;
    channels  = img->nChannels;
    data      = (uchar *)img->imageData;

    // Begin
    WhiteCount = 0;
    for(i=0;i<height;i++) 
    {
      for(j=0;j<width;j++) 
      { // Go through each channel of the image (R,G, and B) to see if it's equal to 255
        bWhite = 0;
        for(k=0;k<channels;k++)
        {   // This checks if the pixel's kth channel is 255 - it can be faster.
            if (data[i*step+j*channels+k]==255) bWhite = 1;
            else 
            {
                bWhite = 0;
                break;
            }
        }
        if(bWhite == 1) WhiteCount++;
      }
    }       

    printf("Percentage: %f%%",100.0*WhiteCount/(height*width));

    return 0;
}

Otros consejos

Puedes usar cv :: countNonZero y restar si tu imagen es solo en blanco y negro.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top