Python 如何利用圆方程实现圆检测?

Python 如何利用圆方程实现圆检测?,python,opencv,geometry,Python,Opencv,Geometry,我试图通过方程实现,r=sqrt((x-h)^2-(y-k)^2)从图像中检测圆 我应用了高斯模糊的步进列表,canny。之后,如果半径和边界点可用,我就不知道如何实现上述方程。在实现之后,我将得到累加器空间,它包含被检测圆的半径和圆心。我想用opencv的out houghcirle函数来实现。有什么办法可以帮我吗?花了这么多时间 import numpy as np import cv2 import math image = cv2.imread(imagepath) h, w = i

我试图通过方程实现,
r=sqrt((x-h)^2-(y-k)^2)
从图像中检测圆

我应用了高斯模糊的步进列表,canny。之后,如果半径和边界点可用,我就不知道如何实现上述方程。在实现之后,我将得到累加器空间,它包含被检测圆的半径和圆心。我想用opencv的out houghcirle函数来实现。有什么办法可以帮我吗?花了这么多时间

import numpy as np
import cv2
import math

image = cv2.imread(imagepath)

h, w = image.shape[:2]
print h, w

grayimg = cv2.cvtColor(image,cv2.COLOR_BGR2GRAY)

bimg = cv2.bilateralFilter(grayimg, 5, 175, 175)

cann = cv2.Canny(bimg,100,200)

pixel = np.argwhere(cann == 255)


accum = []
ct = 0
for r in range(10,21):
    for h in range(0,20):
        for k in range(0,20):
            for p in pixel:
                print r,h,k,p
                xpart = (h - p[0])**2
                ypart = (k - p[1])**2
                rhs = xpart + ypart
                lhs = r * r
                if(lhs == rhs):
                    accum.append((r,(h,k),p))

print len(accum)
cv2.waitKey(0)

在这段代码中还需要一些改进,以使累加器空间的处理速度更快

accum = [[[0 for r in range(10,21)]for h in range(0,30)]for k in range(0,30)]
print accum
ct = 0
for r in range(10,21):
    for h in range(0,30):
        for k in range(0,30):
            for p in pixel:
                #print r,h,k,p
                xpart = (h - p[0])**2
                ypart = (k - p[1])**2
                rhs = xpart + ypart
                lhs = r * r
                if(lhs == rhs):
                    accum[k][h][r-10] += 1

你的问题有点不清楚,你能解释一下吗?看看我想用Hough变换实现Hough变换。Rosa Gronchi ZDAR考虑一个包含圆矩阵的图像。我想实现给定的圆检测方程。对于上述方程,x和y是边缘检测图像的边界点,h,k可以是图像上的每个点。若满足上述方程,将得到圆心值和圆半径。在这种情况下,半径是10到20。@Zara您已经在使用Hough变换(从像素空间到方程参数空间)…;)