OpenCV3霍夫變換(圓檢測)

2021-10-08 20:02:21 字數 1654 閱讀 8980

cv::houghcircles

因為霍夫圓檢測對雜訊比較敏感,所以要對影象做中值濾波;

基於效率考慮,opencv中實現的霍夫變換圓檢測時基於影象梯度的實現,分為兩步

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

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

houghcircles(

inputarray imgage,//輸入影象,必須為8位的單通道灰度影象

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

int method,//方法-hough_gradient

double dp,//dp=1

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

double param1,

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

int minradius,//最小半徑

int maxradius//最大半徑

)

//opencv3霍夫變換-圓的檢測

#include

#include

using

namespace std;

using

namespace cv;

intmain

(int argc,

char

** ar**)

//進行色彩空間的轉換

cvtcolor

(img, img, cv_bgr2gray)

;imshow

("img"

, img)

;//霍夫圓檢測

vectorpcircles;

//存放圓心,極座標表示(x,y,r)

houghcircles

(img, pcircles, cv_hough_gradient,1,

100,

100,30,

0,200)

;//1-累加器影象的解析度,增大則解析度變小

//100-很重要的乙個引數,告訴兩個圓之間的距離的最小距離,如果已知一副影象,可以先行計算出符合自己需要的兩個圓之間的最小距離。

//100-canny演算法的閾值上限,下限為一半(即100以上為邊緣點,50以下拋棄,中間視是否相連而定)

//30-決定成圓的多寡 ,乙個圓上的畫素超過這個閾值,則成圓,否則丟棄

//0-最小圓半徑,這個可以通過確定你需要的圓的區間範圍

//200-最大圓半徑

//從新載入影象

mat newimg =

imread

(file);if

(newimg.

empty()

)//畫圓

OpenCV3霍夫變換檢測直線

hough line transform用來做直線檢測 前提條件 邊緣檢測已經完成 平面空間到極座標空間轉換 cv houghlinesp inputarray src.輸入影象,必須8 bit的灰度影象 outputarray lines,輸出的極座標來表示直線 double rho,生成極座標時...

OpenCV 霍夫變換圓檢測

在直角座標系下,圓的方程表示為 其中,r是圓的半徑,a,b 是圓心座標。那麼換一種表達方式 因為在直角座標系下,圓上的所有點都滿足圓的方程,所以直角座標系下的乙個圓對應到abr座標系下就是乙個點。直角座標系下經過乙個點的所有圓在abr座標系下就是一條三維曲線。那麼,直角座標系下圓上的所有點在abr座...

opencv之霍夫變換圓檢測

霍夫變換就是將平面影象轉換到霍夫空間 極座標 進行特徵計算 圓的幾何標準方程 x a 2 y b 2 r 2 x a 2 y b 2 r 2 x a 2 y b 2 r2圓的極座標方程 x a rco s x a rcos theta x a rc os y b rs in y b rsin the...