我搜索了很长时间可能出错但我并不真正了解参数和预处理的影响
我无法发布图片,但是在一张非常清晰的欧元照片上,该程序识别出一些圈子,而不是其他一些圈子,甚至可以像其他人一样清楚.
这是我的代码:
‘$’
import cv2
import numpy as np
filename = r'C:\Users\roseline\Desktop\piecefacile.jpg'
img = cv2.imread(filename)
output = img.copy()
gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY) #BGR donnant GRAY
circles = cv2.HoughCircles(gray, cv2.cv.CV_HOUGH_GRADIENT,1, 70, 200, 100)
if circles is not None:
circles = np.round(circles[0,:]).astype("int") #convertit en entier les données
for (x,y,r) in circles:
cv2.circle(output, (x,y), r, (0,255,0), 4)
cv2.rectangle(output, (x-2,y-2), (x+2,y+2), (0,128, 255), -1)
cv2.imshow("2015_TIPE_LE_DEM", np.hstack([img, output]))
cv2.waitKey(0)
对不起,我希望有人可以帮助我,分享他的知识,我被剥夺了.
这看起来像你设置硬币的最小和最大半径是错误的.算法不检测较小的算法,因为它不会查找它们,并且它确实发现了误报,因为您将阈值设置为低,最大半径设置得太高.
查看this Tutorial和the documentation并使用参数min_radius和max_radius(使两者都更小).您可以预先测量硬币的半径(以像素为单位).
如果你仍然获得正面命中,请使用参数param1和param2.如果您想自动进行,请使用互相关.
看到你的灰度图像会很有趣.如果您的真实世界数据像硬币图像一样简单,那么您真的很幸运.在很多时候,最困难的部分是摆脱噪音.