模糊圆检测

我是 opencv 的新手,想检测这些圆圈的中心点。我尝试使用带有阈值的 Hough Circles,但它似乎并没有一直产生好的结果。

使用轮廓和阈值很容易获得此图像:

更难做到这一点:

阈值和霍夫圆不适用于此图像:

添加更多图像以获取帮助

你能建议任何对所有图像都可靠的方法吗?

回答

由于圆圈是图像中唯一明亮的东西,我们可以通过寻找白色斑点的质心来获得中心。我们将使用 otsu 的自动阈值并使用 findContours 来获取蒙版的质心。

import cv2
import numpy as np

# load image
img = cv2.imread("circ1.png");
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY);

# threshold
gray = cv2.GaussianBlur(gray, (5,5), 0);
_, mask = cv2.threshold(gray, 0, 255, cv2.THRESH_BINARY+cv2.THRESH_OTSU);

# contour
_, contours, _ = cv2.findContours(mask, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE);

# center
M = cv2.moments(contours[0]);
cx = int(M['m10']/M['m00']);
cy = int(M['m01']/M['m00']);
center = (int(cx), int(cy));

# draw
img = cv2.circle(img, center, 4, (0,0,200), -1);

# show
cv2.imshow("marked", img);
cv2.imshow("mask", mask);
cv2.waitKey(0);


以上是模糊圆检测的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>