2017-02-10 4 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

Я попытался донастроить param1 и param2. Либо я заканчиваю ложными обнаружениями (более того), либо вообще ничего! Параметр минимального расстояния устанавливается на 1/8 ширины изображения только как произвольное значение.

Любая помощь была бы очень полезной.

+0

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

+0

Спасибо - хорошее место. У меня явно нет точки и код слепый ;-) – user3182080

+0

Да, я перевернул изображение и установил начало в нижнюю часть - удалив эту строку и используя приведенные ниже параметры. Варианты перевернутого и исходного - для дальнейшей работы над этим проектом. 'Код' окружности = cv2.HoughCircles (THRESH1, cv2.HOUGH_GRADIENT, 1.2, minDist = 10, param1 = 200, param2 = 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

Спасибо за помощь ;-)

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