python opencv - goutte de la détection ou de cercle de détection

J'ai des problèmes de détection de cercle domaines.
Je l'ai essayé avec le HoughCircles fonction de opencv. Cependant, même si les images sont assez similaires, les paramètres de la fonction doivent être différentes afin de détecter la cirles.

Une autre approche que j'ai essayé était pour itérer sur chaque pixel et de vérifier si le pixel est blanc.
Si c'est le cas, alors vérifier si il y a un objet blob dans la zone (distance à goutte centre plus petit qu'un seuil). Si il y est, ajouter le pixel à la goutte, si pas, puis créer un nouveau blob.
Cela aussi n'a pas fonctionné correctement.

Quelqu'un a une idée de comment je peux faire ce travail (90% de détection) ?
J'ai joint un exemple d'image et une autre image où j'ai marqué le cirles.
Merci!

python opencv - goutte de la détection ou de cercle de détection

python opencv - goutte de la détection ou de cercle de détection

Mise à JOUR:
Merci pour l'aide pour l'instant!
C'est le code où j'acquérir les contours et les filtrer par zone:

im = cv2.imread('extract_blue.jpg')
imgray = cv2.cvtColor(im, cv2.COLOR_BGR2GRAY)
im_gauss = cv2.GaussianBlur(imgray, (5, 5), 0)
ret, thresh = cv2.threshold(im_gauss, 127, 255, 0)
# get contours
contours, hierarchy = cv2.findContours(thresh, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)

contours_area = []
# calculate area and filter into new array
for con in contours:
    area = cv2.contourArea(con)
    if 1000 < area < 10000:
        contours_area.append(con)

Cela fonctionne très soigné. J'ai dessiné sur l'image:
python opencv - goutte de la détection ou de cercle de détection

C'est la partie où j'ai filtré par la circularité, il va directement ci-dessous le code où je filtre par région:

contours_cirles = []

# check if contour is of circular shape
for con in contours_area:
    perimeter = cv2.arcLength(con, True)
    area = cv2.contourArea(con)
    if perimeter == 0:
        break
    circularity = 4*math.pi*(area/perimeter*perimeter)
    print circularity
    if 0.8 < circularity < 1.2:
        contours_cirles.append(con)

Cependant, la nouvelle liste "contours_cirles' est vide. J'ai imprimé la "circularité" dans la boucle et les valeurs sont toutes entre 10 000 et 100 000.

Mise à JOUR #2:
Après la correction de l'manquant crochets, elle travaille maintenant!

contours_cirles = []

# check if contour is of circular shape
for con in contours_area:
    perimeter = cv2.arcLength(con, True)
    area = cv2.contourArea(con)
    if perimeter == 0:
        break
    circularity = 4*math.pi*(area/(perimeter*perimeter))
    print circularity
    if 0.7 < circularity < 1.2:
        contours_cirles.append(con)

Merci beaucoup les gars! 🙂

python opencv - goutte de la détection ou de cercle de détection

Très ancien code. Mais vous pouvez vérifier cela. github.com/bipul21/Colored-Ball-Tracking
(area/perimeter*perimeter) ce qui semble étrange pour moi. Etes-vous sûr que vous n'avez pas oubliez l'un des crochets ?
oui, vous avez raison. la circularité = 4*math.pi*(zone/(périmètre*périmètre))
c'est le travail!
Beau travail. Je dois essayer cela aussi. 😀

OriginalL'auteur cmplx96 | 2017-02-13