霍夫圓檢測進行鋼管檢測

通過霍夫圓檢測來檢測圖片中的圓形。例如鋼管檢測

HoughCircles裏面的參數是可以自己設置的,具體參數的設置,在文章的最後。

再把參數調整一下檢測效果還會好一些。

import cv2 as cv
import numpy as np
image1 = cv.imread("zzw.jpg")  #讀取要檢測的圖片
se = cv.getStructuringElement(cv.MORPH_RECT, (3, 3))
image = cv.morphologyEx(image1, cv.MORPH_GRADIENT, se)
cv.imwrite("image.png", image)
gray = cv.cvtColor(image, cv.COLOR_BGR2GRAY)
circles= cv.HoughCircles(gray, cv.HOUGH_GRADIENT, 1, 10, param1=100, param2=35, minRadius=5, maxRadius=30)
for c in circles[0]:
    print(c)
    x, y, r = c
    b = np.random.randint(0, 256)
    g = np.random.randint(0, 256)
    r = np.random.randint(0, 256)
    cv.circle(image1,(c[0],c[1]),c[2],(255,0,0),5)  #將檢測到的圓畫到圖片上
print(len(circles[0]))
cv.imwrite("hough_det.png", image1)  #保存圖片

 

霍夫圓檢測參數:

cv.HoughCircles(image, method, dp, minDist, circles, param1, param2, minRadius, maxRadius)

image:參數圖像8位,單通道,灰度輸入圖像。

method:參數方法檢測方法,參數圓輸出找到的圓的矢量的方法。上面用的是基於梯度的霍夫圓檢測。

dp:累加器分辨率與圖像分辨率的反比。例如,如果dp=1,累加器的分辨率與輸入圖像相同。如果dp=2,累加器一半的寬度和高度。

minDist:檢測圓中心之間的最小距離。如果參數爲太小,除了一個真正的圓外,可能還會錯誤地檢測到多個相鄰圓。如果是太大,有些圓可能會丟失。

param1:第一個方法特定參數。在hough_梯度的情況下,它是較高的通過Canny邊緣檢測器的兩個閾值(較低的閾值小兩倍)。

param2:第二個方法特定參數。在hough_梯度的情況下,它是檢測階段圓心的累加器閾值。它越小,就越多 可能會檢測到假圓。與較大的累加器值相對應的圓先返回。

minRadius:最小半徑最小圓半徑。

maxRadius:最大半徑最大圓半徑。如果<=0,則使用最大圖像尺寸。如果<0,則返回沒有找到半徑的中心。
 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章