我正尝试使用HoughCircles检测下图中的圆圈。
这是我正在查找所有圈子的代码。
import cv2
import numpy as np
img = cv2.imread("images/coins.jpg", 0)
cimg = cv2.cvtColor(img,cv2.COLOR_GRAY2BGR)
minDist = 247
circles = cv2.HoughCircles(img,cv2.HOUGH_GRADIENT,1,minDist,
param1=170,param2=80,minRadius=0,maxRadius=0)
print(circles)
#print("Number of circles detected ", circles.length)
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)
cv2.waitKey(0)
cv2.destroyAllWindows()
对于我尝试的所有操作,我都无法检测到一枚硬币。检测到的圆圈如下所示。
我在这里有三个问题:
minDist
参数有什么作用?您能解释一下它是如何工作的吗?我阅读了文档,但听不懂。minRadius
中的maxRadius
和zero
在这里是什么意思?答案 0 :(得分:4)
未检测到第一行左侧第二个硬币的原因是什么?
param1
,未检测到第二枚硬币。
降低param1
的值,您将得到一个完美的答案。 minDist
参数有什么作用?您能解释一下它是如何工作的吗?我阅读了文档,但听不懂。
minDist
是2个圆圈之间的最小值。如果减小minDist
的值,则会得到多个相邻的圆圈。 minRadius
中的maxRadius
和zero
是什么意思?
minRadius
最小圆半径。maxRadius
最大圆半径。如果为<= 0
,则使用最大图片尺寸。如果为< 0
,则返回中心而未找到半径。这里是完整代码:
import cv2
import numpy as np
img = cv2.imread("coins.jpg", 0)
cimg = cv2.cvtColor(img,cv2.COLOR_GRAY2BGR)
minDist = 247
circles = cv2.HoughCircles(img,cv2.HOUGH_GRADIENT,1,minDist,
param1=150,param2=80,minRadius=0,maxRadius=0)
print(circles)
#print("Number of circles detected ", circles.length)
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.imwrite('detected_circle.jpg',cimg)
cv2.imshow('detected circles',cimg)
cv2.waitKey(0)
cv2.destroyAllWindows()