通过霍夫圆检测来检测图片中的圆形。例如钢管检测
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,则返回没有找到半径的中心。
转载自原文链接, 如需删除请联系管理员。
原文链接:霍夫圆检测进行钢管检测,转载请注明来源!