Go Premium for a chance to win a PS4. Enter to Win

x
  • Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 353
  • Last Modified:

compute mean and standard deviation of RGB color

Hello..., I really need your help..URGENT..and please reply as soon as
possible. I was given a few sample of images in BMP format (device-
independent-bitmap(DIB). Can you give me a few sample of the source code
on how to compute the mean and the standard deviation on the RGB color
for each sample to take the average color to get the standard color of the
image( for example I took 10 sample of images of pepper berries). Thanx.
0
juexxs
Asked:
juexxs
  • 2
1 Solution
 
alexoCommented:
Sounds like homework...
0
 
nietodCommented:
I'm not sure.  That sounds too weird to be even homework.  

There is a lot involved in this process.  Can you tell us what you problem areas are?  also if it is homework, we will still be happy to HELP you, but we won't do it for you.  For (100 points on a question of this size, no one is likely to do it for you in any case).
0
 
RONSLOWCommented:
Should be fairly simple..

Load the bitmap file into a HBITMAP object in memory

Once you have the bitmap object, associate a device context with it (CreateCompatibleDC and select the bitmap into it).

You can get the RGB (COLORREF) data at any pixel with GetPixel()

Write nexted for loops that go through the entire bitmap and accumulate and count the rgb components of each pixel.  Then do the statistics

An alternative is to use some of the OpenGL code which reads in bitmap files and stores them in an array of RGB values.  Then you can just do some array arithmetic

0
 
RONSLOWCommented:
Here is some code using OpenGL functions to read in the bitmap from a file and compute the average colour

#include <glu.h>
#include <GLAUX.H>

COLORREF AverageColor (LPCTSTR filename) {
  AUX_RGBImageRec *pImage;

  glPixelStorei(GL_PACK_ALIGNMENT, 1);
  glPixelStorei(GL_UNPACK_ALIGNMENT, 1);

  pImage = ::auxDIBImageLoad(filename);

  int sum[3] = {0,0,0};
  int ave[3];

  int n = pImage->sizeX*pImage->sizeY;
  for (int i = 0; i < n*3; i+=3) {
    sum[0] += pImage->data[i+0];
    sum[1] += pImage->data[i+1];
    sum[2] += pImage->data[i+2];
  }
  ave[0] = unsigned char (sum[0]/n);
  ave[1] = unsigned char (sum[1]/n);
  ave[2] = unsigned char (sum[2]/n);

  return RGB(ave[0],ave[1],ave[2]);
}

You can expand this to do std dev etc.

0

Featured Post

Concerto's Cloud Advisory Services

Want to avoid the missteps to gaining all the benefits of the cloud? Learn more about the different assessment options from our Cloud Advisory team.

  • 2
Tackle projects and never again get stuck behind a technical roadblock.
Join Now