第十六天霍夫圓檢測

2021-08-30 13:53:13 字數 2014 閱讀 5675

void houghcircles(inputarray image,outputarray circles, int method, double dp, double mindist, double param1=100,double param2=100, int minradius=0, int maxradius=0 )

第乙個引數,inputarray型別的image,輸入影象,即源影象,需為8位的灰度單通道影象。

第二個引數,inputarray型別的circles,經過呼叫houghcircles函式後此引數儲存了檢測到的圓的輸出向量,每個向量由包含了3個元素的浮點向量(x, y, radius)表示。第三個引數,int型別的method,即使用的檢測方法,目前opencv中就霍夫梯度法一種可以使用,它的識別符號為cv_hough_gradient,在此引數處填這個識別符號即可。第四個引數,double型別的dp,用來檢測圓心的累加器影象的解析度於輸入影象之比的倒數,且此引數允許建立乙個比輸入影象解析度低的累加器。上述文字不好理解的話,來看例子吧。例如,如果dp= 1時,累加器和輸入影象具有相同的解析度。如果dp=2,累加器便有輸入影象一半那麼大的寬度和高度。第五個引數,double型別的mindist,為霍夫變換檢測到的圓的圓心之間的最小距離,即讓我們的演算法能明顯區分的兩個不同圓之間的最小距離。這個引數如果太小的話,多個相鄰的圓可能被錯誤地檢測成了乙個重合的圓。反之,這個引數設定太大的話,某些圓就不能被檢測出來了。第六個引數,double型別的param1,有預設值100。它是第三個引數method設定的檢測方法的對應的引數。對當前唯一的方法霍夫梯度法cv_hough_gradient,它表示傳遞給canny邊緣檢測運算元的高閾值,而低閾值為高閾值的一半。第七個引數,double型別的param2,也有預設值100。它是第三個引數method設定的檢測方法的對應的引數。對當前唯一的方法霍夫梯度法cv_hough_gradient,它表示在檢測階段圓心的累加器閾值。它越小的話,就可以檢測到更多根本不存在的圓,而它越大的話,能通過檢測的圓就更加接近完美的圓形了。第八個引數,int型別的minradius,有預設值0,表示圓半徑的最小值。第九個引數,int型別的maxradius,也有預設值0,表示圓半徑的最大值。需要注意的是,使用此函式可以很容易地檢測出圓的圓心,但是它可能找不到合適的圓半徑

--------------------- 

import cv2 as cv

import numpy as np

def detect_circles_demo(image):

dst = cv.pyrmeanshiftfiltering(image,200, 200) ##霍夫均值漂移

cimage = cv.cvtcolor(dst, cv.color_bgr2gray)

circles = cv.houghcircles(cimage, cv.hough_gradient, 1, 20, param1=50, param2=30, minradius=0, maxradius=0) ##霍夫圓檢測

circles = np.uint16(np.around(circles))

for i in circles[0, :]:

cv.circle(image, (i[0], i[1]), i[2], (0, 0, 255), 2)

cv.circle(image, (i[0], i[1]), 2, (255, 0, 0), 2) ##圓心

cv.imshow("circles", image)

src = cv.imread("c:/users/weiqiangwen/desktop/sest/contours.png")

# cv.namedwindow("input contours",cv.window_autosize)

cv.imshow("contours", src)

detect_circles_demo(src)

cv.waitkey(0)

cv.destroyallwindows()

print("--------- python opencv tutorial ---------")

Python 第十六天

魔法方法總是被雙下劃線包圍 例如 init 注 魔法方法第乙個引數為cls 類方法 或者self 例項方法 其中 cls 代表乙個類名稱 self 代表乙個例項物件的名稱 基本方法 init self 構造器,當乙個例項被建立的時候呼叫的初始化方法 new cls 是在乙個物件例項化的時候所呼叫的第...

寒假第十六天

abs x 返回數字的絕對值,如abs 10 返回 10 ceil x 返回數字的上入整數,如math.ceil 4.1 返回 5 cmp x,y 如果 x y 返回 1,如果 x y 返回 0,如果 x y 返回 1 exp x 返回e的x次冪 ex 如math.exp 1 返回2.7182818...

python第十六天

一 包 1 什麼是包?一系列模組的集合 2 有什麼用?包通過資料夾來管理一系列功能相近的模組 3 包重點?包中一定有乙個專門用來管理包中所有模組的檔案 init 4 什麼是包名?包名是存放一系列模組的資料夾名字 5 包名有什麼用 包名 包物件 存放的是管理模組的那個檔案的位址,指向其全域性命名空間。...