刚学VC图像处理不久,昨天纠结了一天计算图像的直方图,结果总是不对,发现问题有二:
1.采用读文件得到的图像数组的指针是指向图像数组的最下面一行的,从下向上的
2.数组存在补零的问题,每一行不满4个字节会补齐,如果直接采用p++的形式,就会导致读进去很多0,然后有其他的像素没有读到,统计的直方图一定是有问题的
3.应该是用无符号的字符型,即unsigned char,这样才能到255
都是一些很简单的问题,但是自己去做,总还是会有疏忽的地方。
代码如下:
unsigned char * p = (unsigned char *)dib.GetBits();
int n = dib.GetBitsPerPixel();//图像一个像素为24位
int i,j;
int m = dib.GetWidth()*dib.GetHeight();
if (m!=0)
{
for(i = 0;i<dib.GetHeight();i++)
{
for (j = 0;j<dib.GetWidth();j++)
{
m_Count[*(p+j)]++;
}
p = p+dib.BytesPerLine();
}
bflag = true;
}