大家帮帮忙看下我这段哈夫变换的程序哪儿有错误,对一条直线也识别错?void CTest5Doc::OnProcessHough()
{
Bitmap.GetBitmapBits(Totalsize,bmpinfo);
int m,n,theta,rou;
m=(int)sqrt(bminfo.bmWidth*bminfo.bmWidth+bminfo.bmHeight*bminfo.bmHeight)+1;
n=1800;
int *Polar=NULL;
Polar=(int*)malloc(m*n*sizeof(int));
memset(Polar,0,sizeof(int)*m*n); int i,j;
for(i=0;i<bminfo.bmHeight;i++)
for(j=0;j<bminfo.bmWidth;j++){
if(bmpinfo[i*bminfo.bmWidth*4+j*4]==0)
for(theta=0;theta<1800;theta++){
rou=(int)fabs(j*cos(theta/10)+(bminfo.bmHeight-i-1)*sin(theta/10));
Polar[rou*1800+theta]=Polar[rou*1800+theta]+1;
}
else
;
}
int max=0,imax=0,jmax=0;
for(i=0;i<m;i++)
for(j=1;j<n;j++){
if(Polar[i*n+j]>=max){
imax=i;
jmax=j;
max=Polar[i*n+j];
}
}
CString roumax,thetamax;
roumax.Format("%d",imax);
thetamax.Format("%d",jmax);
AfxMessageBox(roumax);
AfxMessageBox(thetamax);
free(Polar);
// TODO: Add your command handler code here
}
{
Bitmap.GetBitmapBits(Totalsize,bmpinfo);
int m,n,theta,rou;
m=(int)sqrt(bminfo.bmWidth*bminfo.bmWidth+bminfo.bmHeight*bminfo.bmHeight)+1;
n=1800;
int *Polar=NULL;
Polar=(int*)malloc(m*n*sizeof(int));
memset(Polar,0,sizeof(int)*m*n); int i,j;
for(i=0;i<bminfo.bmHeight;i++)
for(j=0;j<bminfo.bmWidth;j++){
if(bmpinfo[i*bminfo.bmWidth*4+j*4]==0)
for(theta=0;theta<1800;theta++){
rou=(int)fabs(j*cos(theta/10)+(bminfo.bmHeight-i-1)*sin(theta/10));
Polar[rou*1800+theta]=Polar[rou*1800+theta]+1;
}
else
;
}
int max=0,imax=0,jmax=0;
for(i=0;i<m;i++)
for(j=1;j<n;j++){
if(Polar[i*n+j]>=max){
imax=i;
jmax=j;
max=Polar[i*n+j];
}
}
CString roumax,thetamax;
roumax.Format("%d",imax);
thetamax.Format("%d",jmax);
AfxMessageBox(roumax);
AfxMessageBox(thetamax);
free(Polar);
// TODO: Add your command handler code here
}
看了许久都没有看出来哪里出问题了.
反正感觉找直线的程序是没有什么问题的............