我已经花了几个小时试图解决这个问题,而StackOverflow上的类似问题对我没有帮助。
假设我有这样一个图像(实际上这是一个更复杂的图像,但我现在只举一个简单的例子):
我对HOUGH_GRADIENT
执行以下操作:
import cv2
import numpy as np
img = cv2.cvtColor(cv2.imread("example.png"), cv2.COLOR_BGR2GRAY)
img_blur = cv2.GaussianBlur(img, (9, 9), 1.5)
edges = cv2.Canny(img_blur, threshold1=50, threshold2=250)
circles = cv2.HoughCircles(
edges, cv2.HOUGH_GRADIENT, 1.5, 20,
minRadius=10, maxRadius=100, param1=100, param2=100
)
img_cp = cv2.cvtColor(img, cv2.COLOR_GRAY2BGR)
if circles is not None:
circles = np.round(circles[0, :]).astype("int")
for (x, y, r) in circles:
cv2.circle(img_cp, (x, y), r, (0, 255, 0), 4)
这工作没有任何问题,并检测内圈正如我所希望的:
我试图使用HOUGH_GRADIENT_ALT
代替OpenCV repo声称它工作得更好。据我所知,大多数函数调用参数应该具有相同的含义,而不是param1
和param2
。
所以,我尝试:
circles = cv2.HoughCircles(
edges, cv2.HOUGH_GRADIENT_ALT, 1.5, 20,
minRadius=10, maxRadius=100, param1=300, param2=0.9
)
我什么也没得到。我试过很多不同的参数,但没有结果。我不仅不明白如何修复它,而且我也不明白为什么它不起作用。任何帮助都将非常感谢。
OpenCV版本4.5.5。
2条答案
按热度按时间t3psigkw1#
HOUGH_GRADINT_ALT似乎坏了。我有一个稍微变形的白色圆圈的图像,半径230,黑色背景,大约是420 x420,我称之为
HoughCircle(加边的圆圈,HOUGH_GRADIENT_ALT,1# dp. accumsize=图像大小并且也检测“小,”圆圈之间的20# mindist,600#参数1 =中心的阈值,0.7#参数2 =[完美度,M,362];#最小值,最大值
如果我设置M=194它工作。如果我设置M=193或更低它不工作。从文档中我了解这个函数应该检测我的圆,即使我设置它为0。
rjee0c152#
我解决了问题。试试这个:编辑:我们不能使用此
cv2.HOUGH_GRADIENT_ALT
输出:
编辑:我们可以
cv2.HOUGH_GRADINT_ALT
和使用从@瓦莱里娅剪。输出: