hough变换拟合直线

本文介绍了如何使用Hough变换在二值图像中检测直线,包括参数方程的设定、代码实现以及如何在新图像上绘制检测到的直线。
摘要由CSDN通过智能技术生成

       在实际应用中,y=k*x+b形式的直线方程没有办法表示x=c形式的直线(这时候,直线的斜 率为无穷大)。所以实际应用中,是采用参数方程p=x*cos(theta)+y*sin(theta)。这样,图像平面 上的一个点就对应到参数p—theta平面上的一条曲线上。其它的还是一样。Hough变换求取直线的源码:


  1. //提取直线   能够在二值图像中提取场地中的白线,并进行重建   
  2. //采用Hough变换  
  3.   
  4.   
  5. #include <iostream>  
  6. #include<cv.h>  
  7. #include <highgui.h>  
  8. #include <math.h>  
  9. #define PI 3.1415926  
  10. using namespace std;  
  11.   
  12.   
  13. int main(){  
  14.     IplImage * image,*image2;  
  15.     image = cvLoadImage("E:\\image\\game\\board.bmp",0);  
  16.     cvNamedWindow("image",1);  
  17.     cvShowImage("image",image);  
  18.   
  19.   
  20.   
  21.   
  22.     //Hough变换   
  23.     //用Hough提取出所有的直线,并在一张新图中进行绘制  
  24.     image2  = cvCreateImage(cvSize(image->width,image->height),image->depth,1);  
  25.     int i,j;  
  26.     unsigned char *ptr,* dst;  
  27.     //参数空间的参数 角度0~度 每格2度 distance = fabs(x*cosA + y *sinA)  
  28.     double angle;  
  29.     int distance;  
  30.     int PerAngle = 2;   
  31.     int m,n;  
  32.     int AngleNum = 90; //角度范围0~360度  
  33.     int maxDistance = (int)(sqrt(pow((double)image->width,2)+ pow((double)image->height,2)) + 2 );  
  34.     //cout<<maxDistance<<endl;  
  35.     //参数空间各个点的统计值,使用一维数组,排序方便  
  36.     //申请一块内存,存放各个直线的出现次数  
  37.       
  38.     int * number = new int [AngleNum * maxDistance];  
  39.     double Hsin,Hcot;  
  40.     int count = 0;  
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值