git:https://github.com/linyi0604/Computer-Vision
1 # coding:utf8
2
3 import cv2
4 import numpy as np
5
6 img_origin = cv2.imread("../data/circle.jpg")
7 img_gray = cv2.cvtColor(img_origin, cv2.COLOR_BGR2GRAY)
8 # 低同滤波进行平滑图像
9 img = cv2.medianBlur(img_gray, 5)
10 cimg = cv2.cvtColor(img, cv2.COLOR_GRAY2BGR)
11
12 circles = cv2.HoughCircles(img, cv2.HOUGH_GRADIENT, 1, 120,
13 param1=100,param2=30,
14 minRadius=0, maxRadius=0)
15 """
16 cv2.HoughCircles(image, method, dp,
17 minDist, circles, param1, param2,
18 minRadius, maxRadius)
19 参数:
20 image: 输入图像 必须是灰度图像
21 method:检测方法,常用CV_HOUGH_GRADIENT
22 dp:检测内侧圆心的累加器图像的分辨率于输入图像之比的倒数,
23 如dp=1,累加器和输入图像具有相同的分辨率,如果dp=2,
24 累计器便有输入图像一半那么大的宽度和高度
25 minDist: 两个圆心之间的最小距离
26 param1: 默认100, 是method方法的参数
27 在CV_HOUGH_GRADIENT表示传入canny边缘检测的阈值
28 param2: 默认100,method的参数,
29 对当前唯一的方法霍夫梯度法cv2.HOUGH_GRADIENT,
30 它表示在检测阶段圆心的累加器阈值,
31 它越小,就越可以检测到更多根本不存在的圆,
32 而它越大的话,能通过检测的圆就更加接近完美的圆形了
33 minRadius:默认值0,圆半径的最小值
34 maxRadius:默认值0,圆半径的最大值
35 返回值:
36
37 """
38 # 整数化
39 circles = np.uint16(np.around(circles))
40
41 for i in circles[0, :]:
42 # 画出外边圆
43 cv2.circle(img_origin, (i[0], i[1]), i[2], (0, 255, 0), 2)
44 # 画出圆心
45 cv2.circle(img_origin, (i[0], i[1]), 2, (0, 0, 255), 3)
46
47
48 cv2.imshow("", img_origin)
49 cv2.waitKey()
50 cv2.destroyAllWindows()