1. 程式人生 > >Hough檢測直線原理及c++程式碼

Hough檢測直線原理及c++程式碼

函式功能:檢測影象中的線段
函式原型:
CvSeq* cvHoughLines2(
  CvArr* image,
  void* line_storage,
  int method,
  double rho,
  double theta,
  int threshold,
  double param1=0, double param2=0
);
引數說明:
第一個引數表示輸入影象,必須為二值影象(黑白圖)。
第二個引數表示儲存容器,和上一篇的輪廓檢測一樣,可以傳入CvMemStorage型別的指標。
第三個引數表示變換變數,可以取下面的值:
  CV_HOUGH_STANDARD - 傳統或標準 Hough 變換. 每一個線段由兩個浮點數 (ρ, θ) 表示,其中 ρ 是線段與原點 (0,0) 之間的距離,θ 線段與 x-軸之間的夾角。
  CV_HOUGH_PROBABILISTIC - 概率 Hough 變換(如果影象包含一些長的線性分割,則效率更高)。它返回線段分割而不是整個線段。每個分割用起點和終點來表示。
  CV_HOUGH_MULTI_SCALE - 傳統 Hough 變換的多尺度變種。線段的編碼方式與 CV_HOUGH_STANDARD 的一致。
第四個引數表示與象素相關單位的距離精度。
第五個引數表示弧度測量的角度精度。
第六個引數表示檢測線段的最大條數,如果已經檢測這麼多條線段,函式返回。
第七個引數與第三個引數有關,其意義如下:
  對傳統 Hough 變換,不使用(0).
  對概率 Hough 變換,它是最小線段長度.
  對多尺度 Hough 變換,它是距離精度 rho 的分母 (大致的距離精度是 rho 而精確的應該是 rho / param1 ).
第八個引數與第三個引數有關,其意義如下:
  對傳統 Hough 變換,不使用 (0).
  對概率 Hough 變換,這個引數表示在同一條線段上進行碎線段連線的最大間隔值(gap), 即當同一條線段上的兩條碎線段之間的間隔小於param2時,將其合二為一。
  對多尺度 Hough 變換,它是角度精度 theta 的分母 (大致的角度精度是 theta 而精確的角度應該是 theta / param2).