OpenCV 霍夫圆变换不工作
OpenCV Hough Circle Transform Not Working
我已经按照 OpenCV 的教程 here 在我的 Raspberry Pi 上进行圆圈检测。这是我使用的代码,除了图像不同外,与教程相同。
import cv2
import numpy as np
img = cv2.imread('watch.jpg',0)
img = cv2.medianBlur(img,5)
cimg = cv2.cvtColor(img,cv2.COLOR_GRAY2BGR)
circles = cv2.HoughCircles(img,cv2.HOUGH_GRADIENT,1,20,
param1=50,param2=30,minRadius=0,maxRadius=0)
circles = np.uint16(np.around(circles))
for i in circles[0,:]:
cv2.circle(cimg,(i[0],i[1]),i[2],(0,255,0),2)
cv2.circle(cimg,(i[0],i[1]),2,(0,0,255),3)
cv2.imshow('image',cimg)
cv2.waitKey(0)
cv2.destroyAllWindows()
然后当我 运行 脚本时,我看到的就是这个
这是原图
发生这种情况的原因是什么?
提前致谢!
编辑:
Hough Circle Transform产生的大量圆是由于圆心检测阈值偏低造成的,在[=11=中为param2
] 在你的情况下。
因此请尝试增加 param2
的值以避免错误检测。
您还可以调整 minRadius
和 maxRadius
值以获得更好的结果。
编辑:
我刚刚尝试了 here 中的示例,仅将 param2
更改为 10
,将 minRadius
更改为 30
,将 maxRadius
更改为 50
。结果还不错:
上面link中的示例是用C++编写的,但是您可以比较参数和函数调用的顺序来改进您自己的算法。
我已经按照 OpenCV 的教程 here 在我的 Raspberry Pi 上进行圆圈检测。这是我使用的代码,除了图像不同外,与教程相同。
import cv2
import numpy as np
img = cv2.imread('watch.jpg',0)
img = cv2.medianBlur(img,5)
cimg = cv2.cvtColor(img,cv2.COLOR_GRAY2BGR)
circles = cv2.HoughCircles(img,cv2.HOUGH_GRADIENT,1,20,
param1=50,param2=30,minRadius=0,maxRadius=0)
circles = np.uint16(np.around(circles))
for i in circles[0,:]:
cv2.circle(cimg,(i[0],i[1]),i[2],(0,255,0),2)
cv2.circle(cimg,(i[0],i[1]),2,(0,0,255),3)
cv2.imshow('image',cimg)
cv2.waitKey(0)
cv2.destroyAllWindows()
然后当我 运行 脚本时,我看到的就是这个
这是原图
发生这种情况的原因是什么?
提前致谢!
编辑:
Hough Circle Transform产生的大量圆是由于圆心检测阈值偏低造成的,在[=11=中为param2
] 在你的情况下。
因此请尝试增加 param2
的值以避免错误检测。
您还可以调整 minRadius
和 maxRadius
值以获得更好的结果。
编辑:
我刚刚尝试了 here 中的示例,仅将 param2
更改为 10
,将 minRadius
更改为 30
,将 maxRadius
更改为 50
。结果还不错:
上面link中的示例是用C++编写的,但是您可以比较参数和函数调用的顺序来改进您自己的算法。