霍夫梯度法遗漏了一些圆圈

问题描述 投票:0回答:1

考虑下面的图片:

可以看到,很多圆圈没有被检测到。我已经玩过了

param1
param2
(
cv2.HoughCircles
)

在下面的代码中:

import cv2
import numpy as np
from PIL import Image

# Load the image and downscale it
img = Image.open('/tmp/F01-02.jpg')
img = img.resize((img.size[0] // 2, img.size[1] // 2))  # downscale by a factor of 2
open_cv_image = np.array(img) 

# Convert to grayscale
gray = cv2.cvtColor(open_cv_image, cv2.COLOR_RGB2GRAY)

# Apply Hough transform
circles = cv2.HoughCircles(gray, cv2.HOUGH_GRADIENT, 1, 40, param1=5, param2=30, minRadius=7, maxRadius=10)

# Ensure at least some circles were found
if circles is not None:
    circles = np.round(circles[0, :]).astype("int")
    for (x, y, r) in circles:
        cv2.circle(open_cv_image, (x, y), r, (0, 255, 0), 2)

pil_image = Image.fromarray(open_cv_image)
pil_image.save('/tmp/result.jpg')

有什么想法吗?谢谢!

python opencv image-processing object-detection omr
1个回答
1
投票

通过避免第 7 行处的缩小步骤并使用HoughCircles函数的以下参数,我设法找到了每个感兴趣的圆。 circles = cv2.HoughCircles(image=gray, method=cv2.HOUGH_GRADIENT, dp=1.7, minDist=10, param1=100, param2=30, minRadius=2, maxRadius=15)

结果:

我不知道这种方法有多稳健,有必要用更广泛的输入进行测试。也许不使用

HoughCircles

的其他方法可能更稳健(例如检测网格本身并推断圆位置)。

© www.soinside.com 2019 - 2024. All rights reserved.