霍夫变换直线检测C++程序代码前段时间想在网上找个现成的霍夫变换直线检测的C++程序,发现找到的都是调用OpenCV库函数来实现的,都不能用,没办法,回头只能自己写了。具体代码如下,如有问题还请多多指教!个人百度空间:接口参数描述//pImg----待检测图片指针//width----图像宽//height---图像高//k----------返回检测到的直线的斜率//b---------返回检测到的直线的纵截距//FIT_POINT_PIX_VAL-----用于进行直线检测的拟合点的像素值(预先设定好)voidzxwHoughTransform(BYTE*pImg,intwidth,intheight,double&k,double&b){//赋初值,检测角度的最大值和最小值constintMinTheta=0;constintMaxTheta=180;inti,j;intw,h;intcosV,sinV;int**count,max,nmax;inttheta,thro;//初始化nmax=(int)sqrt(width*width+height*height);count=newint*[MaxTheta];for(i=0;iMaxTheta;i++){count[i]=newint[nmax];memset(count[i],0,sizeof(int)*nmax);}//统计count值BYTE*pCur=pImg;for(theta=MinTheta;thetaMaxTheta;theta+=1){cosV=(int)(cos(PI*theta/180)*2048);sinV=(int)(sin(PI*theta/180)*2048);for(h=0;hheight;h++){for(w=0;wwidth;w++){if(*(pCur+h*width+w)==FIT_POINT_PIX_VAL){thro=(w*cosV+h*sinV)11;if(thronmax&&thro0){count[theta][thro]++;}}}}}//求取出现次数最多的count所对应的theta和thromax=count[0][0];theta=0;thro=0;for(i=MinTheta;iMaxTheta;i++){for(j=0;jnmax;j++){if(count[i][j]max){max=count[i][j];theta=i;thro=j;}}}//返回--坐标转换返回k=-1.0/tan(PI*theta/180);b=thro/sin(PI*theta/180);//deletefor(i=0;iMaxTheta;i++){delete[]count[i];}delete[]count;}