霍夫变换:霍夫变换是图像处理中的一种特征提取技术
有两种:霍夫直线检测,霍夫圆检测

1,霍夫直线检测

HoughLines: 标准霍夫变换
HoughLinesP: 累计概率霍夫变换

函数原型
1.1,HoughLines:标准霍夫直线检测

  1. public static LineSegmentPolar[] HoughLines(InputArray image,
  2. double rho,
  3. double theta,
  4. int threshold,
  5. double srn = 0,
  6. double stn = 0);

返回值:LineSegmentPolar类型数组,包括,线长,角度
image: 输入图片
rho: 直线搜索时的单位半径(像素单位)
theta: 直线搜索是的
threshold: 阈值,指搜索直线时,它在累计平面必须达到的阈值,大于threshold的值才会被返回
srn 对于多尺度霍夫变换,它是距离分辨率的因子。[默认值为0] 如果不是设置0 表示经典霍夫变换
stn 对于多尺度霍夫变换,它是距离分辨率的因子。[默认值为0] 如果不是设置0 表示经典霍夫变换

1.2,HoughLinesP: 累计概率霍夫变换:
函数原型:

  1. public static LineSegmentPoint[] HoughLinesP(InputArray image,
  2. double rho,
  3. double theta,
  4. int threshold,
  5. double minLineLength = 0,
  6. double maxLineGap = 0);

返回值: LineSegmentPoint类型的数组
image: 输入图像
rho: 直线搜索时的单位半径(像素单位)
theta: 直线搜索是的
threshold: 阈值,指搜索直线时,它在累计平面必须达到的阈值,大于threshold的值才会被返回
minLineLength : 最小线长度。比这个短的线条被忽略
maxLineGap : 同一条线上的点之间连接它们的最大允许间隙。[默认值为0]


关于标准直线检测 HoughLines 返回值 LineSegmentPolar[] 的处理

  1. for (int i = 0; i < lineing.Length; i++)
  2. {
  3. double rho = lineing[i].Rho;//线长
  4. double theta = lineing[i].Theta;//角度
  5. Point pt1 = new Point();
  6. Point pt2 = new Point();
  7. double a = Math.Cos(theta);
  8. double b = Math.Sin(theta);
  9. double x0 = a * rho, y0 = b * rho;
  10. pt1.X = (int)Math.Round(x0 + 600 * (-b));
  11. pt1.Y = (int)Math.Round(y0 + 600 * a);
  12. pt2.X = (int)Math.Round(x0 - 600 * (-b));
  13. pt2.Y = (int)Math.Round(y0 - 600 * a);
  14. Cv2.Line(Result1, pt1, pt2, Colar, 4,LineTypes.Link8);
  15. }

关于概率直线检测HoughLinesP的返回值LineSegmentPoint[] 的处理

  1. for (int i = 0; i < Line.Count(); i++)
  2. {
  3. Point p1 = Line[i].P1;
  4. Point p2 = Line[i].P2;
  5. Cv2.Line(Result,p1,p2, Colar,4,LineTypes.Link8);
  6. }