Обнаружение точечной цели OpenCV не находит все цели, а найденные круги смещены

Я пытаюсь обнаружить центр черной/белой точки мишени, как на этой картинке. Я пытался использовать метод cv2.HoughCircles, но во-первых, я могу обнаружить только от 2 до 3 целей, а во-вторых, когда я наношу найденные круги обратно на изображение, они всегда немного смещаются.

Я использую неправильный метод? Должен ли я использовать findContours или что-то совершенно другое?

Вот мой код:

import cv2
from cv2 import cv
import os
import numpy as np

def showme(pic):
    cv2.imshow('window',pic)
    cv2.waitKey()
    cv2.destroyAllWindows()


im=cv2.imread('small_test.jpg')

gray=cv2.cvtColor(im,cv2.COLOR_BGR2GRAY)

#I've tried blur,bw,tr...  all give me poor results.

blur = cv2.GaussianBlur(gray,(3,3),0)
n,bw = cv2.threshold(blur,120,255,cv2.THRESH_BINARY)
tr=cv2.adaptiveThreshold(blur,255,0,1,11,2)

circles = cv2.HoughCircles(gray, cv.CV_HOUGH_GRADIENT, 3, 100, None, 200, 100, 5, 16)

try:
    n = np.shape(circles)
    circles=np.reshape(circles,(n[1],n[2]))
    print circles
    for circle in circles:
        cv2.circle(im,(circle[0],circle[1]),circle[2],(0,0,255))
    showme(im)
except:
    print "no cicles found"

А это мой текущий вывод:

8
задан karlphillip 24 December 2013 в 14:52
поделиться