2017-03-03 2 views
0

Ich möchte einen Kreis aus einem gegebenen Bild erkennen. Aber es funktioniert einfach nicht so, wie ich es möchte. Ich habe einen Kreiserkennungsalgorithmus implementiert, der auf einigen Bildern mit einem Kreis arbeitet, aber nicht auf dem einen, den ich möchte. Ich habe mit den Parametern gezwängt, konnte es aber nicht zum Laufen bringen.Kreis nicht gefunden

import cv2 
import numpy as np 

# load the image, clone it for output, and then convert it to grayscale 
image = cv2.imread("damn-circle.png") 
output = image.copy() 
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY) 

# detect circles in the image 
blur = cv2.GaussianBlur(gray,(5,5),0) 
circles = cv2.HoughCircles(blur, cv2.HOUGH_GRADIENT, 2, 120) 
cv2.imshow("output", np.hstack([blur])) 
cv2.waitKey(0) 
print circles 

# ensure at least some circles were found 
if circles is not None: 
    # convert the (x, y) coordinates and radius of the circles to integers 
    circles = np.round(circles[0, :]).astype("int") 

    # loop over the (x, y) coordinates and radius of the circles 
    for (x, y, r) in circles: 
     # draw the circle in the output image, then draw a rectangle 
     # corresponding to the center of the circle 
     cv2.circle(output, (x, y), r, (0, 255, 0), 4) 
     cv2.rectangle(output, (x - 5, y - 5), (x + 5, y + 5), (0, 128, 255), -1) 

    # show the output image 
    cv2.imshow("output", np.hstack([output])) 
    cv2.waitKey(0) 

Normal circle The circle I want to detect

Antwort

0

Sie Code ist fast perfekt. Es ist nur so, dass die Methode CV_HOUGH_GRADIENT in einem Paket, cv sitzt (zumindest für opencv Version: 2.4.13). Ich habe diese eine Zeile geändert, um das Paket zu erwähnen, und es hat gut funktioniert. Sie müssen bestimmte Versionen für OpenCV und NumPy verwenden, wenn Sie immer noch nicht das richtige Ergebnis für dieses einfache Bild erhalten. Ändern Sie Ihre Zeile wie folgt: circles = cv2.HoughCircles(blur, cv2.cv.CV_HOUGH_GRADIENT, 2, 120) Sie sollten ein schönes Ergebnis erhalten. Zumindest habe ich es gerade getan. image with found Hough circle shown

Bearbeitet: Ah, ich habe nicht verstanden, welches Bild die Frage war. Ich habe die Parameter für mehrere Elemente geändert, insbesondere den Canny-Detektorparameter und den Radius min/max und die Akkumulatorauflösung. Ich denke, diese params finden, was Sie wollen: circles = cv2.HoughCircles(blur, method = cv2.cv.CV_HOUGH_GRADIENT, minDist = 90 , dp = 1, param1 = 3, param2 = 12 , minRadius = 30, maxRadius = 50) jetzt Mein gefunden Bild sieht wie folgt aus: another image with found circle

+0

Sie mich vielleicht falsch verstanden. Ich benutze OpenCV 3.0. Das Paket 'cv2.cv' wurde nur in' cv2' verschoben. Ich kann das Bild auch perfekt erkennen, aber versuche den gleichen Code mit dem Bild unten. Es funktioniert nicht :) – Sylnois

+0

Ich habe meine Antwort bearbeitet, um das Bild abzudecken, in dem Sie den Kreis finden wollten. –