模糊圆检测
我是 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);