霍夫變換可以實現任何由引數方程描述的幾何體的檢測。
1.檢測直線
原理:霍夫變換基於二值影象,尋找經過每個單獨畫素點的所有直線,當直線經過足夠多的畫素點,則這個直線的存在足夠明顯。
/lines為二維向量,vector定義二維浮點向量
houghlines(result, lines, 1, pi/
180, 120); //霍夫變換
vector::iterator it = lines.begin();
while (it != lines.end())
else
it++;
}namedwindow("hough");
imshow("hough", result);
概率霍夫檢測:不再逐行掃瞄影象,隨機選擇畫素。一旦累加器達到閾值,則移除直線所經過的畫素點,並接受線段的長度。
void houghlinesp( inputarray image, outputarray lines,double rho, double theta, int threshold,double minlinelength = 0, double maxlinegap = 0 );
minlinelength表示接受線段的最小長度,maxlinegap表示畫素點的最大距離。
**:linefinder.h標頭檔案:
#include
#include
#include
#define pi 3.141591653
using
namespace
std;
using
namespace cv;
class linefinder
//設定解析度
void setaccresolusion(double drho, double dtheta)
void setlengthandgap(double length, double gap)
void setminvote(int minv)
vector
findlines(mat &binary)
void drawdetectedlines(mat &image, scalar color = scalar(255,255,255))
}};
main.cpp檔案
#include
#include
#include
#include "linefinder.h"
#define pi 3.141591653
using
namespace
std;
using
namespace cv;
int main()
檢測圓:
三個引數確定乙個圓。
houghcircles( inputarray image, outputarray circles, int method, double dp,double mindist, double param1 = 100, double param2 = 100, int minradius = 0, int maxradius = 0 );
src_gray: 輸入影象 (灰度圖),無需canny變換
circles: 儲存下面三個引數: x_, y_, r 集合的容器來表示每個檢測到的圓.
cv_hough_gradient: 指定檢測方法. 現在opencv中只有霍夫梯度法
dp = 1: 累加器影象的反比解析度
min_dist = src_gray.rows/8: 檢測到圓心之間的最小距離
param_1 = 200: canny邊緣函式的高閾值
param_2 = 100: 圓心檢測閾值.投票數
min_radius = 0: 能檢測到的最小圓半徑, 預設為0.
max_radius = 0: 能檢測到的最大圓半徑, 預設為0
OpenCV 霍夫線變換 霍夫圓變換
關於霍夫變換在官方文件opencv249裡的描述如下 api如下 void houghlines inputarray image,outputarray lines,double rho,double theta,int threshold,double srn 0,double stn 0 vo...
缺點 霍夫圓 霍夫變換
霍夫變換是一種特徵提取,被廣泛應用在影象分析 電腦視覺以及數字影像處理。霍夫變換是用來辨別找出物件中的特徵,例如 線條。他的演算法流程大致如下,給定乙個物件 要辨別的形狀的種類,演算法會在引數空間中執行投票來決定物體的形狀,而這是由累加空間 accumulator space 裡的區域性最大值來決定...
霍夫變換 Hough Transform
霍夫變換的主要作用是從影象中檢測出具有某種相同特徵的幾何形狀,如直線 圓等。霍夫變換的基本原理 例如檢測情景為直線檢測。我們知道,在直角座標系下,直線方程表示為y k x b 其中k,b 為引數,表示直線的斜率和截距。那麼,對於直角座標系下的某個特定點 x 0,y0 過該點的任意直線方程為y0 k ...