python實現圓檢測


目錄:

(一)霍夫圓檢測原理

(二)代碼實現

 

 

 

(一)霍夫圓檢測原理

 

 

 

 (二)代碼實現

 1 #霍夫圓檢測
 2 import cv2 as cv
 3 import numpy as np
 4 
 5 def detect_circles_demo(image):
 6     dst = cv.pyrMeanShiftFiltering(image, 10, 100)   #邊緣保留濾波EPF
 7     cimage = cv.cvtColor(dst, cv.COLOR_RGB2GRAY)
 8     circles = cv.HoughCircles(cimage, cv.HOUGH_GRADIENT, 1, 20, param1=50, param2=30, minRadius=0, maxRadius=0)
 9     circles = np.uint16(np.around(circles)) #把circles包含的圓心和半徑的值變成整數
10     for i in circles[0, : ]:
11         cv.circle(image, (i[0], i[1]), i[2], (0, 0, 255), 2)  #畫圓
12         cv.circle(image, (i[0], i[1]), 2, (0, 0, 255), 2)  #畫圓心
13     cv.imshow("circles", image)
14 
15 src = cv.imread('E:/imageload/coins.jpg')
16 cv.namedWindow('input_image', cv.WINDOW_NORMAL) #設置為WINDOW_NORMAL可以任意縮放
17 cv.imshow('input_image', src)
18 detect_circles_demo(src)
19 cv.waitKey(0)
20 cv.destroyAllWindows()

 注意:

1.OpenCV的霍夫圓變換函數原型為:HoughCircles(image, method, dp, minDist[, circles[, param1[, param2[, minRadius[, maxRadius]]]]]) -> circles

image參數表示8位單通道灰度輸入圖像矩陣。

method參數表示圓檢測方法,目前唯一實現的方法是HOUGH_GRADIENT。

dp參數表示累加器與原始圖像相比的分辨率的反比參數。例如,如果dp = 1,則累加器具有與輸入圖像相同的分辨率。如果dp=2,累加器分辨率是元素圖像的一半,寬度和高度也縮減為原來的一半。

minDist參數表示檢測到的兩個圓心之間的最小距離。如果參數太小,除了真實的一個圓圈之外,可能錯誤地檢測到多個相鄰的圓圈。如果太大,可能會遺漏一些圓圈。

circles參數表示檢測到的圓的輸出向量,向量內第一個元素是圓的橫坐標,第二個是縱坐標,第三個是半徑大小。

param1參數表示Canny邊緣檢測的高閾值,低閾值會被自動置為高閾值的一半。

param2參數表示圓心檢測的累加閾值,參數值越小,可以檢測越多的假圓圈,但返回的是與較大累加器值對應的圓圈。

minRadius參數表示檢測到的圓的最小半徑。

maxRadius參數表示檢測到的圓的最大半徑。

2.OpenCV畫圓的circle函數原型:circle(img, center, radius, color[, thickness[, lineType[, shift]]]) -> img

img參數表示源圖像。

center參數表示圓心坐標。

radius參數表示圓的半徑。

color參數表示設定圓的顏色。

thickness參數:如果是正數,表示圓輪廓的粗細程度。如果是負數,表示要繪制實心圓。

lineType參數表示圓線條的類型。

shift參數表示圓心坐標和半徑值中的小數位數。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM