【OpenCV】61 二值图像分析—霍夫圆检测

61 二值图像分析—霍夫圆检测

代码

import cv2 as cv
import numpy as np

src = cv.imread("../images/coins.jpg")
cv.namedWindow("input", cv.WINDOW_AUTOSIZE)
cv.imshow("input", src)
gray = cv.cvtColor(src, cv.COLOR_BGR2GRAY)
gray = cv.GaussianBlur(gray, (9, 9), 2, 2)
dp = 2
param1 = 100
param2 = 80

circles = cv.HoughCircles(gray, cv.HOUGH_GRADIENT, dp, 30, None, param1, param2, 20, 80)
for c in circles[0,:]:
    print(c)
    cx, cy, r = c
    cv.circle(src, (cx, cy), 2, (0, 255, 0), 2, 8, 0)
    cv.circle(src, (cx, cy), r, (0, 0, 255), 2, 8, 0)

# 显示
cv.imshow("hough line demo", src)
cv.waitKey(0)
cv.destroyAllWindows()

实验结果

在这里插入图片描述

解释

根据极坐标,圆上任意一点的坐标可以表示为如上形式, 所以对于任意一个圆, 假设中心像素点p(x0, y0)像素点已知, 圆半径已知,则旋转360由极坐标方程可以得到每个点上得坐标同样,如果只是知道图像上像素点, 圆半径,旋转360°则中心点处的坐标值必定最强.这正是霍夫变换检测圆的数学原理
X = x0+rcos(theta)
Y = y0+rsin(theta)

OpenCV中霍夫圆检测的API与参数解释如下:

circles	= cv.HoughCircles(image, method, dp, minDist[, circles[, param1[, param2[, minRadius[, maxRadius]]]]]	)
  • image表示输入单通道的灰度图像
  • method 圆检测的方法
  • dp表示图像分辨率是否有变化,默认1表示保持跟原图大小一致
  • minDist表示检测到的圆,两个圆心之间的最小距离
  • circles 表示检测的圆信息(圆心+半径)
  • param1 表示边缘提取的高阈值
  • param2表示霍夫空间的累加阈值
  • minRadius 表示可以检测圆的最小半径
  • maxRadius 表示可以检测圆的最大

所有内容均来源于贾志刚老师的知识星球——OpenCV研习社,本文为个人整理学习,已获得贾老师授权,有兴趣、有能力的可以加入贾老师的知识星球进行深入学习。
在这里插入图片描述

发布了111 篇原创文章 · 获赞 0 · 访问量 1689

猜你喜欢

转载自blog.csdn.net/liu_taiting/article/details/104875870