gpt4 book ai didi

python - Python OpenCV从黑白蒙版检测圆圈

转载 作者:行者123 更新时间:2023-12-02 17:49:41 26 4
gpt4 key购买 nike

我使用各种OpenCV滤镜创建了黑白蒙版。有四个清晰可见的圆圈

我正在尝试使用HoughCircles勾勒出这些圆圈,但它会带来许多误报和通常不好的结果:
circles = cv2.HoughCircles(combined, cv.CV_HOUGH_GRADIENT, 1, 300, np.array([]), 10, 30, 60, 300)
如何正确检测黑白图像中的圆形?

这是可用于黑白图像的可运行代码:

import numpy as np
import cv2
import cv

image = cv2.imread("image.png")
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)

circles = cv2.HoughCircles(gray, cv.CV_HOUGH_GRADIENT, 1, 300, np.array([]), 10, 30, 60, 300)
if circles is not None:
circles = np.uint16(np.around(circles))
for i in circles[0,:]:
cv2.circle(image, (i[0], i[1]), i[2], (0, 255, 0), 1)
cv2.circle(image, (i[0], i[1]), 2, (0, 0, 255), 3)

cv2.imshow("thing", image)

cv2.waitKey(0)
cv2.destroyAllWindows()

最佳答案

首先,如果我没记错的话,Hough Transform for circle期望空心圆而不是完整的圆。这意味着您仅需要在应用霍夫变换之前提取圆的边界/周长。 OpenCV的findContoursarcLength函数将帮助您找到边界。

第二,不幸的是,根据我的经验,霍夫变换对圆形状的变化非常敏感,这意味着如果您要检测的形状“几乎”是一个圆,则可能无法检测到它。

我的建议是,您应该尝试通过将Closing morphological operation应用于具有磁盘形结构元素的二进制镜像来使对象“更圆”。然后提取图像中对象的周长,然后仅应用霍夫变换。希望这会给您足够的效果。

另外,您可以尝试使用RANSAC算法检测圆。 Here是用于检测直线的实现,但是您可以针对圆调整它-只需随机选择3个点(而不是2个点),然后定义一个穿过它们的圆。接下来,找到位于该圆附近的所有点(这些点称为内点)。这些将是满足不平等的要点:

其中(x,y)是点,(x0,y0)是圆的中心,r是圆的半径,margin是您必须调整的参数。
其余算法相同。

祝好运!

关于python - Python OpenCV从黑白蒙版检测圆圈,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25695988/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com