如何从轮廓分割圆?
How to segment circle from contour?
目标:在 OpenCV 中定位球
问题:我有一个面具,我为我的球获得了 hsv 边界,但一些背景渗入了我的面具。我怎样才能从我不需要的背景中分割出我想要的圆圈?
我怀疑问题是我正在使用 minEnclosingCircle,但我不知道还能使用什么
我试过腐蚀我的面具来分开圆圈,但它对我没有太大好处
遮罩
结果圆
def draw_circle(orig,mask,name):
cnts=cv2.findContours(mask.copy(),cv2.RETR_EXTERNAL,cv2.CHAIN_APPROX_SIMPLE)
cnts=imutils.grab_contours(cnts)
center=None
if len(cnts)>0:
c=max(cnts,key=cv2.contourArea)
((x,y),radius)=cv2.minEnclosingCircle(c)
M=cv2.moments(c)
center = (int(M["m10"] / M["m00"]), int(M["m01"] / M["m00"]))
if radius > 10:
cv2.circle(orig, (int(x), int(y)), int(radius),
(0, 255, 255), 2)
cv2.circle(orig, center, 5, (0, 0, 255), -1)
#d=int(name.split(".JPG")[0])
#expected_R=(231*1.6)/(2*d)
#error=1.0-(radius/expected_R)
#print "error is "+str(error)
else:
print "oops"
cv2.imshow(str(name)+" circled",orig)
cv2.imshow(str(name)+" mask",mask)
cv2.waitKey(0)
目标:在 OpenCV 中定位球
问题:我有一个面具,我为我的球获得了 hsv 边界,但一些背景渗入了我的面具。我怎样才能从我不需要的背景中分割出我想要的圆圈? 我怀疑问题是我正在使用 minEnclosingCircle,但我不知道还能使用什么
我试过腐蚀我的面具来分开圆圈,但它对我没有太大好处
遮罩
结果圆
def draw_circle(orig,mask,name):
cnts=cv2.findContours(mask.copy(),cv2.RETR_EXTERNAL,cv2.CHAIN_APPROX_SIMPLE)
cnts=imutils.grab_contours(cnts)
center=None
if len(cnts)>0:
c=max(cnts,key=cv2.contourArea)
((x,y),radius)=cv2.minEnclosingCircle(c)
M=cv2.moments(c)
center = (int(M["m10"] / M["m00"]), int(M["m01"] / M["m00"]))
if radius > 10:
cv2.circle(orig, (int(x), int(y)), int(radius),
(0, 255, 255), 2)
cv2.circle(orig, center, 5, (0, 0, 255), -1)
#d=int(name.split(".JPG")[0])
#expected_R=(231*1.6)/(2*d)
#error=1.0-(radius/expected_R)
#print "error is "+str(error)
else:
print "oops"
cv2.imshow(str(name)+" circled",orig)
cv2.imshow(str(name)+" mask",mask)
cv2.waitKey(0)