检测具有完美圆周的圆

Detect circle with perfect circumference of circle

需要用 Python 检测具有完美圆周的圆,还想创建规则以供将来使用

规则

Image 1 Image 2

以下代码尝试检测 Circle,但 Result 正在获取圆周上重叠的所有 Circle。以下是参考代码。

import cv2 as cv
import numpy as np
import argparse

ap = argparse.ArgumentParser()
ap.add_argument("-i", "--image", required=True, help="Path to Image")
args = vars(ap.parse_args())

image = cv.imread(args['image'])
output = image.copy()
img_gray = cv.cvtColor(image, cv.COLOR_BGR2GRAY)
img_gray = cv.Canny(img_gray,100,200)
img_gray = cv.GaussianBlur(img_gray, (21,21), cv.BORDER_DEFAULT)

circles = cv.HoughCircles(img_gray, cv.HOUGH_GRADIENT, 1, 20, \
    param1=50, param2=30, minRadius=0, maxRadius=0)

dectected_circles = np.uint16(np.around(circles)) #round(circles[0:]).astype("int")

for (x, y, r) in dectected_circles[0, : ]:
    cv.circle(output, (x, y), r, (0, 255, 0), 3)
    cv.circle(output, (x, y), 2, (0, 128, 255), 3)

cv.imwrite('result.jpg',output)

请看一下HoughCircle的文档,有一个叫做minDist的参数指定检测到的圆之间的最小距离。如果您知道要检测的圆的直径,无论是通过一些先验知识还是通过使用 HoughCircles 进行第一遍,您都可以在适当设置 minDist 的情况下进行第二遍。这应该只给你一个重叠圆圈的检测。

另一方面,如果右边的圆根本不应该被检测到,那么我会简单地遍历所有检测并丢弃那些距离小于两个半径之和的检测。

此致

安德烈亚斯