OpenCV grid area

I want to find a non-white area of ​​a camera image using OpenCV. I can already find circles using images from my webcam. I want to create a grid or something else to determine the percentage of the image is not white. Any ideas?

+3
source share
2 answers

If you want to find the percentage of pixels in an image that is not white, why don't you just count all the pixels that are not white and divide it by the total number of pixels in the image?

Code in 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 equal to 255
        bWhite = 0;
        for(k=0;k<channels;k++)
        {   // This checks if the pixel 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;
}
+4
source

You can use cv::countNonZeroand subtract if your image is only black and white.

0

Source: https://habr.com/ru/post/1720918/


All Articles