-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathopencv笔记022:霍夫圆环变换
46 lines (34 loc) · 1.92 KB
/
opencv笔记022:霍夫圆环变换
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
'''
image为输入图像,需要灰度图
method为检测方法,常用CV_HOUGH_GRADIENT
dp为检测内侧圆心的累加器图像的分辨率于输入图像之比的倒数,如dp=1,累加器和输入图像具有相同的分辨率,如果dp=2,
累计器便有输入图像一半那么大的宽度和高度
minDist表示两个圆之间圆心的最小距离
param1有默认值100,它是method设置的检测方法的对应的参数,对当前唯一的方法霍夫梯度法cv2.HOUGH_GRADIENT,
它表示传递给canny边缘检测算子的高阈值,而低阈值为高阈值的一半
param2有默认值100,它是method设置的检测方法的对应的参数,对当前唯一的方法霍夫梯度法cv2.HOUGH_GRADIENT,
它表示在检测阶段圆心的累加器阈值,它越小就越可以检测到更多根本不存在的圆,它越大就越能通过检测的圆就更加接近完美的圆形
minRadius有默认值0,圆半径的最小值
maxRadius有默认值0,圆半径的最大值
'''
import cv2
import numpy as np
img = cv2.imread('o.jpg',0)
img = cv2.medianBlur(img,5)
cimg = cv2.cvtColor(img,cv2.COLOR_GRAY2BGR)
dp=1
minDist=20
param1=100
#e=cv2.Canny(img,param1/2,param1)
#原图有两个同心圆,由于minDist不能设置为0,所以找到小圆就找不到大圆。这里为了找大圆,手动设置了最小半径
circles = cv2.HoughCircles(img,cv2.HOUGH_GRADIENT,dp,minDist,param1=param1,param2=70,
minRadius=80,maxRadius=0)
#np.around是四舍五入,实测0.5会变0而0.51变1
#np.uint16是指0到65535的正整数,这里由于没有负数也不会超过上限,不用也行
circles = np.uint16(np.around(circles))
for i in circles[0,:]:
# draw the outer circle
cv2.circle(cimg,(i[0],i[1]),i[2],(0,255,0),2)
# draw the center of the circle
cv2.circle(cimg,(i[0],i[1]),2,(0,0,255),3)
cv2.imshow('detected circles',cimg)