Pergunta

Eu quero encontrar a área não-branco de uma imagem de uma câmera usando OpenCV. Eu já pode encontrar círculos usando imagens de meu web cam. Eu quero fazer uma grade ou algo que eu possa determinar o percentual da imagem não é branco. Alguma idéia?

Foi útil?

Solução

Se você quiser encontrar a porcentagem de pixels em sua imagem que não é branco, por que você não apenas contar todos os pixels que não são branco e dividi-lo pelo número total de pixels na imagem?

Código em 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;
}

Outras dicas

Você pode usar cv::countNonZero e subtrair se sua imagem é apenas preto e branco.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top