【问题标题】:circle detection in noisy a image噪声图像中的圆形检测
【发布时间】:2019-11-24 11:59:11
【问题描述】:

我有下面的泡泡筏图片

这是我用来检测圆圈的代码:

import cv2
import numpy as np
import sys

img = cv2.imread(sys.argv[1],0)
img = cv2.medianBlur(img,5)
cimg = cv2.cvtColor(img,cv2.COLOR_GRAY2BGR)

circles = cv2.HoughCircles(img,cv2.HOUGH_GRADIENT,1,20,
                            param1=50,param2=30,minRadius=5,maxRadius=25)

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()

不幸的是,我只能检测到几个圆圈:

我想检测图像中的大部分圆圈。从中我可以通过编程找到图像中间附近的位错。 非常感谢任何帮助。提前致谢。

编辑:根据下面 shortcipher3 的建议,我将 param2 从 HoughCircles 降低到 15 并将最小半径增加到 16,现在我可以检测到大部分圆圈,如下所示:

【问题讨论】:

  • 索贝尔过滤器有帮助吗?
  • 我不知道。我是图像处理的新手。从维基百科的文章来看,这似乎很有趣。你有一个最小的工作示例吗?
  • 尝试应用形态膨胀或闭合来增加边框宽度
  • 看看这个,也许你可以适应这个想法:stackoverflow.com/questions/34650697/…

标签: python opencv


【解决方案1】:

我不清楚你的问题是什么,我假设你想要检测更多的圆圈?

HoughCircles 的文档可以在这里找到:

https://docs.opencv.org/2.4/modules/imgproc/doc/feature_detection.html?highlight=houghcircles

根据文档,我会说您的阈值在电话 circles = cv2.HoughCircles(img,cv2.HOUGH_GRADIENT,1,20, param1=50,param2=30,minRadius=5,maxRadius=25) 中并不理想

我会先尝试降低param2,如果这对你不起作用,我也会尝试使用param1 的值。

【讨论】:

  • 我想检测所有的圈子。刚刚将其添加到问题中。谢谢,我会试试你的建议。
猜你喜欢
  • 1970-01-01
  • 2019-06-18
  • 2012-01-04
  • 1970-01-01
  • 2014-06-01
  • 2017-07-11
  • 1970-01-01
  • 1970-01-01
  • 2011-01-27
相关资源
最近更新 更多