python霍夫变换圆形检测

简述:
通过python实现图像中圆形轮廓的检测
选择opencv中的cv2.HoughCircles函数

在这里插入图片描述

参量
image	8位单通道灰度输入图像。
circles	找到的圆的输出向量。每个向量都编码为3元素浮点向量(x,y,radius)
method	检测方法,请参见cv :: HoughModes。当前,唯一实现的方法是HOUGH_GRADIENT
dp	累加器分辨率与图像分辨率的反比。例如,如果dp = 1,则累加器具有与输入图像相同的分辨率。如果dp = 2,则累加器的宽度和高度是其一半。
minDist	检测到的圆心之间的最小距离。如果参数太小,则除了真实的圆圈外,还可能会错误地检测到多个邻居圆圈。如果太大,可能会错过一些圆圈。
param1	第一个方法特定的参数。对于CV_HOUGH_GRADIENT,它是传递给Canny边缘检测器的两个阈值中的较高阈值(较低的阈值则小两倍)。
param2	第二种方法特定的参数。在CV_HOUGH_GRADIENT的情况下,它是检测阶段圆心的累加器阈值。它越小,可以检测到的假圆圈越多。与较大的累加器值相对应的圆将首先返回。
minRadius	最小圆半径。
maxRadius	最大圆半径。

python实现如下:

"""
Linyan--5/4-2020
采用cv2.HoughCircles函数实现图像中圆的检测
"""
import cv2
import numpy as np
#读入图像
# img = cv2.imread('images/twoCoins.png',0)
img = cv2.imread('images/coins.png',0)
img = cv2.medianBlur(img,5)
cimg = cv2.cvtColor(img,cv2.COLOR_GRAY2BGR)
#进行Hough变换
circles = cv2.HoughCircles(img,cv2.HOUGH_GRADIENT,1,100,
                            param1=130,param2=115,minRadius=12,maxRadius=500)
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,0,255),2)
    # draw the center of the circle
    cv2.circle(cimg,(i[0],i[1]),2,(0,0,255),3)
#print出图像
cv2.imshow('detected circles',cimg)
cv2.waitKey(0)
cv2.destroyAllWindows()
# cv2.imwrite("images/new_twoCoins.png",cimg)
cv2.imwrite("images/new_coins.png",cimg)

猜你喜欢

转载自blog.csdn.net/weixin_41729258/article/details/105920584