2017-02-10 45 views
0

這是一個簡單的圖像,具有相同大小和硬邊的斑點作爲灰度圖像。爲什麼下面的代碼找不到這些圈子?OpenCV3圓檢測 - 如何找到簡單的圓圈(明顯的解決方案未找到)

ret,thresh1 = cv2.threshold(img,180,250,cv2.THRESH_BINARY) 
thresh1 = cv2.blur(thresh1,(15,15)) 
circles = cv2.HoughCircles(thresh1,cv2.HOUGH_GRADIENT, 2, np.shape(thresh1)[0]/8, param1=200, param2=10) 
if circles is not None: 
    plt.imshow(np.flipud(thresh1), origin='lower', cmap='bone') 
    circles = np.uint16(np.around(circles)) 
for i in circles[0,:]: 
    currentAxis = plt.gca() 
    currentAxis.add_patch(Circle((i[0] , i[1]), i[2],fill=False,color='red')) 
    currentAxis.add_patch(Circle((i[0] , i[1]), 8,fill=True,color='green')) 
plt.show() 

Simple Blobs Not Detected

,我得到的輸出是這樣的:

Detection Not Correct

我試着調整參數1和參數。要麼我得到錯誤的檢測結果(超過這個)或者什麼都沒有!最小距離參數僅設置爲圖像寬度的1/8作爲任意值。

任何幫助將是非常有幫助的。

+0

我想你的情節可能是顛倒?仍然沒有找到所有的圈子,但是也許你在嘗試糾正錯誤的東西時玩得太多了? –

+0

感謝 - 好點。我已經清除了點和代碼盲目;-) – user3182080

+0

是的,我顛倒了圖像,並將原點設置爲底部 - 刪除該行並使用下面的參數工作。翻轉和原點選項用於此項目的進一步工作。 '代碼' 圈= cv2.HoughCircles(THRESH1,cv2.HOUGH_GRADIENT,1.2,minDist = 10,參數1 = 200,參數2 = 50,minRadius = 0,maxRadius = 100) '代碼' 做工作很好。 – user3182080

回答

1

圖像被翻轉(np.flipud)並將原點設置在底部 - 這是該項目下一階段的一部分,我只是沒有發現它!此代碼正常工作。

ret,thresh1 = cv2.threshold(img,180,250,cv2.THRESH_BINARY) 
thresh1 = cv2.blur(thresh1,(15,15)) 
circles = cv2.HoughCircles(thresh1,cv2.HOUGH_GRADIENT, 1.2, minDist = 10, param1=200, param2=50, minRadius = 0, maxRadius = 100) 
if circles is not None: 
    plt.imshow((thresh1), cmap='bone') 
    circles = np.uint16(np.around(circles)) 
for i in circles[0,:]: 
    currentAxis = plt.gca() 
    currentAxis.add_patch(Circle((i[0] , i[1]), i[2],fill=False,color='red')) 
    currentAxis.add_patch(Circle((i[0] , i[1]), 8,fill=True,color='green')) 
plt.show() 

產生如下: enter image description here

感謝您的幫助;-)