OpenCV霍夫直線變換和圓變換及畫素重對映

2021-10-25 02:39:14 字數 2813 閱讀 3616

(1)霍夫直線變換介紹

hough      line           transform用來作直線檢測

前提條件——邊緣檢測已經完成

平面空間到極座標空間轉換

對於任意一條直線上的所有點來說,變換到極座標中,從[0~360]空間,可以得到r的大小

屬於同一條直線上點在極座標空(r,theta)必然在乙個點上有最強的訊號出現,根據此反算到平面座標中就可以得到直線上各點的畫素座標。從而得到直線

(2)相關api

標準的霍夫變換cv::houghlines從平面座標轉換到霍夫空間,最終輸出是(θ,rθ)表示極座標空間

霍夫變換直線概率cv::houghlinesp最終輸出是直線的倆個點(x0,y0,x1,y1)

cv::houghlines(inputarray           src,//輸入影象,必須為8-bit的灰度影象

outputarray     lines,//輸出的極座標來表示直線

double             rho,//生成極座標時候的畫素掃瞄步長

double              theta,//生成極座標時候的角度步長,一般取值cv_p1/180

int                     threshold,//閾值,只有獲得足夠交點的極座標點才被看成是直線

double               srn=0;//是否應用多尺度的霍夫變換,如果不是設定0表示經典霍夫變換

double               stn=0;//是否應用多尺度的霍夫變換,如果不是設定為0表示經典霍夫變換

double               min_theta=0;//表示角度掃瞄範圍0~180之間,預設即可

double                max_theta=cv_pi)//一般情況是有經驗的開發者使用,需要自己反變換到平面空間

cv::houghlinesp(inputarray                   src,//輸入影象,必須為8-bit的灰度影象

outputarray     lines,//輸出的極座標來表示直線

double              rho,//生成極座標時候的畫素掃瞄步長

double              theta,//生成極座標時候的角度步長,一般取值cv_p1/180

int                     threshold,//閾值,只有獲得足夠交點的極座標點才被看成是直線

double               min_theta=0;//表示角度掃瞄範圍0~180之間,預設即可

double                max_theta=cv_pi)//

(1)霍夫圓檢測原理

從平面座標到極座標轉換三個引數c(x0,y0,r)其中x0,y0是圓心

假設平面座標的任意乙個圓上的點,轉換到極座標中:c(x0,y0,r)處有最大值,霍夫變換正是利用這個原理實現圓的檢測

(2)相關api(cv::houghcricles)

因為霍夫圓檢測對雜訊比較敏感,所以首先要對影象做中值濾波,基於效率考慮,opencv中實現的霍夫變換圓檢測是基於影象梯度的實現,分為倆步:

檢測邊緣,發現可能的圓心

基於第一步的基礎上從候選圓心開始計算最佳半徑大小

houghcircles(inputarray                   image,//輸入影象,必須是8位的單通道灰度影象

outputarray     image,//輸出結果,發現的圓資訊

int                   method,//方法-hough_gradient

double            dp,//dp=1;

double            mindist,//10最短距離-可以分辨是倆個圓的,否則認為是同心圓

double             param1,//canny edge detection low threshold

double             param2,//中心點累加器閾值-候選圓心

int                     minradius,//最小半徑

int                     maxradius,//最大半徑)

(1)什麼是畫素重對映

簡單點說就是把輸入影象中各個畫素按照一定的規則對映到另外一張影象的對應位置上去,形成一張新的影象

g(x,y)=f(h(x,y));g(x,y)是重對映之後的影象h(x,y)是功能函式f是原影象

(2)api介紹(cv::remap)

remap(inputarray            src,//輸入影象

outputarray           dst,//輸出影象

inputarray              map1,//x對映表cv_32fc1/cv_32fc2

inputarray              map2,//y對映表

int                           interpolation,//選擇的插值方法,常見線性插值,可選擇立方等

int                           bordermode,//border_constant

const                      scalar       bordervalue//color)

Opencv 霍夫變換 直線

注意 下面的解釋屬於bradski和kaehler 的 學習opencv 一書。hough line變換是用於檢測直線的變換。為了應用變換,首先需要邊緣檢測預處理。如你所知,影象空間中的一行可以用兩個變數表示。例如 在笛卡爾座標系中 引數 m,b 在極座標系中 引數 r,對於hough 變換,我們將...

OpenCV 霍夫線變換 霍夫圓變換

關於霍夫變換在官方文件opencv249裡的描述如下 api如下 void houghlines inputarray image,outputarray lines,double rho,double theta,int threshold,double srn 0,double stn 0 vo...

opencv 霍夫圓變換

參考 1 官方文件api 2 d6 d00 tutorial py root.html 官方英文教程 3 4 高階教程 5 官方英文教程 6 7 8 opencv論壇 9 官方github 10 注 安裝的版本 opencv python 3.3.0 cp36 cp36m win amd64.whl...