下面这段程序是想计算一个区域的直方图分布,为什么最后得到的ColorHist似乎为0????请高手指教
#define R_BIN 8
#define G_BIN 8
#define B_BIN 8#define R_SHIFT 5
#define G_SHIFT 5
#define B_SHIFT 5
float ColorHist[512];
int bins=R_BIN*G_BIN*B_BIN;
void MyIPlClass::CalcuColorHistogram(BITMAP bmp,HBITMAP hbitmap2)
{//计算一图像某个区域的彩色直方图分布
int i,index;
int x,y;
int r,g,b;
float r2,k,f;
int a2; int W=bmp.bmWidth;
int H=bmp.bmHeight;
int WB=bmp.bmWidthBytes;
int x0=W/2,y0=H/2; int x_begin=0;
int y_begin=0;
if(x_begin<0)x_begin=0;
if(y_begin<0)y_begin=0; int x_end=W;
int y_end=H;
if(x_end>=W)x_end=W-1;
if(y_end>=H)y_end=H-1;
a2=W*W+H*H;
f=0.0; unsigned char *px=new unsigned char [H*WB];
GetBitmapBits(hbitmap2,H*WB,px);//数组指针px读取像素颜色信息
for(i=0;i<bins;i++)
ColorHist[i]=0.0; for(y=y_begin;y<=y_end;y++)
for(x=x_begin;x<=x_end;x++)
{b=px[(y*W+x)*3]>>B_SHIFT;
g=px[(y*W+x)*3+1]>>R_SHIFT;
r=px[(y*W+x)*3+2]>>G_SHIFT;
index=b*G_BIN*B_BIN+g*B_BIN+r;
r2=(float)((y-y0)*(y-y0)+(x-x0)*(x-x0)*1.0/a2);
k=1-r2;
f=f+k;
ColorHist[index]=ColorHist[index]+k;
}
for(i=0;i<bins;i++)
ColorHist[i]=ColorHist[i]/f;
}
#define R_BIN 8
#define G_BIN 8
#define B_BIN 8#define R_SHIFT 5
#define G_SHIFT 5
#define B_SHIFT 5
float ColorHist[512];
int bins=R_BIN*G_BIN*B_BIN;
void MyIPlClass::CalcuColorHistogram(BITMAP bmp,HBITMAP hbitmap2)
{//计算一图像某个区域的彩色直方图分布
int i,index;
int x,y;
int r,g,b;
float r2,k,f;
int a2; int W=bmp.bmWidth;
int H=bmp.bmHeight;
int WB=bmp.bmWidthBytes;
int x0=W/2,y0=H/2; int x_begin=0;
int y_begin=0;
if(x_begin<0)x_begin=0;
if(y_begin<0)y_begin=0; int x_end=W;
int y_end=H;
if(x_end>=W)x_end=W-1;
if(y_end>=H)y_end=H-1;
a2=W*W+H*H;
f=0.0; unsigned char *px=new unsigned char [H*WB];
GetBitmapBits(hbitmap2,H*WB,px);//数组指针px读取像素颜色信息
for(i=0;i<bins;i++)
ColorHist[i]=0.0; for(y=y_begin;y<=y_end;y++)
for(x=x_begin;x<=x_end;x++)
{b=px[(y*W+x)*3]>>B_SHIFT;
g=px[(y*W+x)*3+1]>>R_SHIFT;
r=px[(y*W+x)*3+2]>>G_SHIFT;
index=b*G_BIN*B_BIN+g*B_BIN+r;
r2=(float)((y-y0)*(y-y0)+(x-x0)*(x-x0)*1.0/a2);
k=1-r2;
f=f+k;
ColorHist[index]=ColorHist[index]+k;
}
for(i=0;i<bins;i++)
ColorHist[i]=ColorHist[i]/f;
}
解决方案 »
- fread问题,谢谢大家!
- ********固定大小的数组转动态数组运算*********300分
- vc6.0编译器使用问题!急!
- 为什么在for循环时OnTimer中不能进去执行OnTimer中的代码?
- 如何让对话框在DoModal关闭时返回对话框上某个按钮的值
- OpenGL如何给三角网格纹理映射 急!!!!
- 做一个COM,编译成Release MinSize报错然后发现是因为用了读写注册表的函数……
- RegCreatekeyEx与UNICODE的问题?
- 为什么我画线都是从原点开始啊,坐标我更新了啊(API)
- 串口 COM3
- 我想做个图片浏览的工具 界面如附件图片 要用到那些技术? listview什么东西?
- 如何在Dialog上响应ComboBox的CBN_SELCHANGE事件
请高手指教
为什么呢?