【问题标题】:OpenCV3 Circle Detection - How to Find Simple Circles (Obvious solutions not being found)OpenCV3 圆检测 - 如何找到简单的圆(未找到明显的解决方案)
【发布时间】:2017-02-10 16:52:22
【问题描述】:

这是一个简单的图像,具有与灰度图像相同的大小和硬边的斑点。为什么下面的代码找不到这些圈子?

ret,thresh1 = cv2.threshold(img,180,250,cv2.THRESH_BINARY)
thresh1 = cv2.blur(thresh1,(15,15))
circles = cv2.HoughCircles(thresh1,cv2.HOUGH_GRADIENT, 2, np.shape(thresh1)[0]/8, param1=200, param2=10)
if circles is not None:
    plt.imshow(np.flipud(thresh1), origin='lower', cmap='bone')
    circles = np.uint16(np.around(circles))
for i in circles[0,:]:
    currentAxis = plt.gca()
    currentAxis.add_patch(Circle((i[0] , i[1]), i[2],fill=False,color='red'))
    currentAxis.add_patch(Circle((i[0] , i[1]), 8,fill=True,color='green'))
plt.show()

我得到的输出是这样的:

我尝试调整 param1 和 param2。要么我最终得到错误检测(不止于此),要么什么都没有!最小距离参数设置为图像宽度的 1/8,仅作为任意值。

任何帮助都会非常有帮助。

【问题讨论】:

  • 我认为你的情节可能是颠倒的?仍然没有找到所有的圆圈,但也许你在调整错误的时候玩得太多了?
  • 谢谢 - 好地方。我显然已经失去了点和代码盲点;-)
  • 是的,我反转了图像并将原点设置为底部 - 删除该行并使用以下参数有效。翻转和原点选项用于此项目的进一步工作。 'code' circles = cv2.HoughCircles(thresh1,cv2.HOUGH_GRADIENT, 1.2, minDist = 10, param1=200, param2=50, minRadius = 0, maxRadius = 100) 'code' 做得很好。

标签: python geometry opencv3.0 hough-transform


【解决方案1】:

图像被翻转 (np.flipud) 并且原点设置为底部 - 这是该项目下一阶段的一部分,我只是没有发现它!此代码工作正常。

ret,thresh1 = cv2.threshold(img,180,250,cv2.THRESH_BINARY)
thresh1 = cv2.blur(thresh1,(15,15))
circles = cv2.HoughCircles(thresh1,cv2.HOUGH_GRADIENT, 1.2, minDist = 10,    param1=200, param2=50, minRadius = 0, maxRadius = 100)
if circles is not None:
    plt.imshow((thresh1), cmap='bone')
    circles = np.uint16(np.around(circles))
for i in circles[0,:]:
    currentAxis = plt.gca()
    currentAxis.add_patch(Circle((i[0] , i[1]), i[2],fill=False,color='red'))
    currentAxis.add_patch(Circle((i[0] , i[1]), 8,fill=True,color='green'))
plt.show()

产生以下内容:

感谢您的帮助;-)

【讨论】:

    猜你喜欢
    • 2023-01-13
    • 2013-11-12
    • 2021-11-17
    • 2015-12-30
    • 2020-09-03
    • 1970-01-01
    • 1970-01-01
    • 2023-03-18
    • 1970-01-01
    相关资源
    最近更新 更多