如何检测哪些圆圈被填充+ OpenCV + Python

时间:2017-04-15 01:31:30

标签: python opencv numpy image-processing circleimage

我正在尝试开发一个代码来识别空圈数之间的实心圆圈。

我已经在中心纵坐标中识别出每个圆圈。 如何检测哪个圆是空的&填充哪个圆圈?

我已经开发了这段代码

import numpy as np
import cv2
import math

img = cv2.imread("small.jpg",0)
img = cv2.medianBlur(img,5)
cimg = cv2.cvtColor(img,cv2.COLOR_GRAY2BGR)

circles =cv2.HoughCircles(img,cv2.HOUGH_GRADIENT,1,60,param1=50,param2=30,minRadius=0,maxRadius=0)

circles = np.uint16(np.around(circles))
counter=0
correctC=[]
xC=[]
yC=[]

for i in circles[0,:]: 
    #cv2.circle(cimg,(i[0],i[1]),i[2],(0,255,0),2)
    #cv2.circle(cimg,(i[0],i[1]),2,(0,0,255),2)
    cv2.putText(cimg,str(i[0])+","+str(i[1])+","+str(i[2]),(i[0],i[1]), cv2.FONT_HERSHEY_SIMPLEX, 0.3,(255,0,0),1,cv2.LINE_AA)
    correctC.append((i[0],i[1],i[2]))
    xC.append(i[0])
    yC.append(i[1])
    counter+=1

print "Circle Count is : " + str(counter)

xCS=sorted(xC)
yCS=sorted(yC)
xS=sorted(correctC, key=lambda correctC:correctC[0])

q1=sorted(xS[:4],key=lambda correctC: correctC[1])
q2=sorted(xS[4:8],key=lambda correctC: correctC[1])
q3=sorted(xS[8:12],key=lambda correctC: correctC[1])
q4=sorted(xS[12:16],key=lambda correctC: correctC[1])
q5=sorted(xS[16:20],key=lambda correctC: correctC[1])
q6=sorted(xS[20:24],key=lambda correctC: correctC[1])
q7=sorted(xS[24:28],key=lambda correctC: correctC[1])
q8=sorted(xS[28:32],key=lambda correctC: correctC[1])
q9=sorted(xS[32:],key=lambda correctC: correctC[1])

sortedTmp=[q1,q2,q3,q4,q5,q6,q7,q8,q9]
sorted=[]

for i in sortedTmp:
    for j in i:
        sorted.append(j)

for i in range(36):
    cv2.putText(cimg,str(i),(sorted[i][0],sorted[i][1]), cv2.FONT_HERSHEY_SIMPLEX, 1,(255,0,0),3,cv2.LINE_AA)

cv2.imshow('detected circles',cimg)
cv2.waitKey(0)
cv2.destroyAllWindows()

这些是我的输入&以上代码的输出图像.. enter image description here enter image description here

提前致谢..

1 个答案:

答案 0 :(得分:1)

涉及的步骤:

  • circles的{​​{1}}信息的第三列获取最小圆半径。

  • 在倒置图片上使用cv2.HoughCircles卷积,目的是找到比背景和 {{更有价值的 2D 卷积时1}}

  • blackened-blobs作为第三列获得圆圈中心的复杂输出。使用半阈值来确定该blob最初为whitened-blobscircles

实施的编辑部分 -

blackened

输出 -

enter image description here

更确切地说,由于我们处理圆圈,我们可以使用圆形掩模作为内核。因此,引入该标准 -

whitened