在opencv

时间:2019-06-26 14:32:08

标签: opencv hough-transform centroid

我试图找到圆形对象的质心或一个可以围绕灰度图像中圆形对象的边界的圆。

到目前为止,我所做的是使用自适应阈值将灰度图像转换为二进制图像。

灰度图像

enter image description here

阈值图像

enter image description here

到目前为止,我已经使用了霍夫变换和Findcontour。这些方法都不起作用。

对此应该采取什么方法?

1 个答案:

答案 0 :(得分:0)

使用霍夫(Hough)变换对圈子我得到了不错的结果。这是管道:

img = cv2.imread('I7Ykpbs.jpg', 0)
img = cv2.GaussianBlur(img, (5, 5), 2, 2)
img_th = cv2.adaptiveThreshold(img, 255, cv2.ADAPTIVE_THRESH_GAUSSIAN_C,
                            cv2.THRESH_BINARY, 9, 3)
circles = cv2.HoughCircles(img_th, cv2.HOUGH_GRADIENT, 2, minDist=30, 
                           param1=200, param2=40, minRadius=10, maxRadius=20)

for i in range(circles.shape[1]):
    c = circles[0,i,:]
    center = (np.round(c[0]), np.round(c[1]))
    radius = np.round(c[2])
    # print(center)
    # print(radius)
    if np.linalg.norm(np.array([600., 600.])-center) < 500.:
        cv2.circle(img, center, 3, (0,255,0), -1, 8, 0)
        cv2.circle(img, center, radius, (0,0,255), 3, 8, 0)

plt.imshow(img)
plt.show()

这并不完美,但是我认为您可以从这里开始,对参数和预处理进行一些微调以优化结果。 Detected circles