2016-05-12 3 views
3

Я пытаюсь обнаружить круги в изображении, и я использую OpenCV Python для этого. Я сталкиваюсь с проблемами, когда использую метод HoughCircles. Я использую следующее custom image, но мой код не может обнаружить оба круга.Определение параметров в методе HoughCircles OpenCV

Я попробовал следующую реализацию

circles = cv2.HoughCircles(thresh1,cv2.cv.CV_HOUGH_GRADIENT,2,1,param1=100,param2=100,minRadius=0,maxRadius=1000) 

и это правильно только обнаружение большего круга в изображении. Я уверен, что если я потрудился с параметрами, я мог бы напасть на комбинацию, которая работает, но есть ли способ, который я могу вычислить, или выяснить параметры, учитывая изображение?

EDIT

Вот весь код, который я написал:

import cv2 
import numpy as np 

def show(s , i): 
cv2.imshow(s , i) 
cv2.waitKey(0) 
cv2.destroyAllWindows() 

img = cv2.imread('ball2.jpg') 
show("img" , img) 
img = cv2.medianBlur(img,5) 
cimg = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY) 
ret,thresh1 = cv2.threshold(cimg,10,255,cv2.THRESH_BINARY) 
show('thresh' , thresh1) 

circles = cv2.HoughCircles(thresh1,cv2.cv.CV_HOUGH_GRADIENT,2,1,param1=100,param2=100,minRadius=0,maxRadius=1000) 
print circles 
circles = np.uint16(np.around(circles)) 
for i in circles[0,:]: 
    # draw the outer circle 
    cv2.circle(thresh1,(i[0],i[1]),i[2],(100,150,120),2) 
    # draw the center of the circle 
    cv2.circle(thresh1,(i[0],i[1]),2,(0,0,0),3) 

cv2.imshow('detected circles',thresh1) 
cv2.waitKey(0) 
cv2.destroyAllWindows() 
+1

Не могли бы вы опубликовать весь код, чтобы мы точно знали, где проблема? –

ответ

1

Вы видели http://www.pyimagesearch.com/2014/07/21/detecting-circles-images-using-opencv-hough-circles/?

Автор предлагает переделать с minDist, как самый важный параметр, но у вас установлено значение 1, поэтому мы должны ожидать ложных положительных, чем не найденных кругов. Я предлагаю также увеличить param1 до 200, чтобы установить верхний порог для внутреннего детектора края Canny для увеличения обнаружения.

Также я обнаружил, что некоторые люди сообщили о странной аномалии, где увеличение maxradius привело к уменьшению круга. Иногда рекомендуется оставлять необязательные параметры по умолчанию (значение 0).

Из моего опыта работы с openCV он часто заканчивается параметрами мастеринга, чтобы получить наилучшие результаты.

Смежные вопросы