python实现圆检测

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参数表示圆心坐标和半径值中的小数位数。

以上是 python实现圆检测 的全部内容, 来源链接: utcz.com/z/388350.html

回到顶部