【问题标题】:Python OpenCV HoughCircles not giving good resultsPython OpenCV HoughCircles 没有给出好的结果
【发布时间】:2023-03-30 12:45:01
【问题描述】:

我需要进行快速准确的圆检测,因此我认为使用 OpenCV 的 Hough Circle 将是一个不错的选择。不幸的是,无论我给它的图像有多好,我调整了多少参数,它都拒绝检测图像中的所有圆圈。这是我的输入图像:

我想检测每个圆圈。首先,我通过滤色器运行图像以提取灰色

frame = cv2.imread("new1.JPG")
hsv = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV)

lower_gray = np.array([0, 0, 0], dtype=np.uint8)
upper_gray = np.array([100,100,100], dtype=np.uint8)

mask = cv2.inRange(frame, lower_gray, upper_gray)
res = cv2.bitwise_and(frame,frame, mask= mask)

gray = cv2.cvtColor(res, cv2.COLOR_BGR2GRAY)
ret, thresh = cv2.threshold(gray, 1, 255, cv2.cv.CV_THRESH_BINARY)

这给了我以下阈值,我认为这实际上非常好。

即使有这么好的阈值,圆圈检测充其量也只是平庸。

circles = cv2.HoughCircles(thresh,cv2.cv.CV_HOUGH_GRADIENT,1,20,param1=50,param2=10,minRadius=2,maxRadius=15) 

我应该使用另一种技术吗?我的轮廓效果很好,但速度很慢。

【问题讨论】:

    标签: python opencv geometry contour


    【解决方案1】:

    在尝试使用 houghCircles 方法之前,您可以尝试使用 cv2.dilate(img, kernel) 来加​​粗线条。

    另外一种处理噪声的通用方法是执行 cv2.erode(img, kernel) 来稀释白色,从而消除图像中的小像素。

    延伸阅读:http://docs.opencv.org/trunk/doc/py_tutorials/py_imgproc/py_morphological_ops/py_morphological_ops.html

    Kernel 只是一个类似于 np.ones() 的矩阵,但您可以尝试各种不同的矩阵,直到获得最有利的结果。

    但是,不要期望计算机视觉能够 100% 做好工作,或者做得很快。如果你达到了 80% 高,你就做得很好(当然取决于实际的图像质量,我并不是说不可能在用油漆绘制的图像上达到 100%)....

    【讨论】:

      猜你喜欢
      • 2018-12-08
      • 2020-11-22
      • 1970-01-01
      • 2018-07-11
      • 1970-01-01
      • 2020-06-30
      • 2022-12-17
      • 2015-05-31
      • 2021-01-06
      相关资源
      最近更新 更多