2016-07-28 27 views
0

ich mit Hough Kreis arbeitete Trans mit meinem Raspberry Pi und wenn ich einen ROI nehme für Kreis wie folgt zu überprüfen:OpenCV Hough Kreis Bedürfnisse Trans 8-Bit-Bild

for (x,y,w,h) in trafficLights: 
    cv2.rectangle(image,(x,y),(x+w,y+h),(0,0,255),2) 
    roi = image[y:y+h,x:x+w] 
    roi = cv2.medianBlur(roi,5) 

    circles = cv2.HoughCircles(roi,cv2.HOUGH_GRADIENT,1,20, 
         param1=50,param2=60,minRadius=0,maxRadius=0) 
    circles = numpy.uint16(numpy.around(circles)) 

    for i in circles[0,:]: 
     if i[2] < 100: 
      cv2.circle(image,(i[0],i[1]),i[2],(0,255,0),2) 
      cv2.circle(image,(i[0],i[1]),2,(0,0,255),3) 
      if i[1] > 315: 
       print "Green Light" 
      else: 
       print "Red Light" 

Ich erhalte diesen Fehler

The source image must be 8-bit, single-channel in function cvHoughCircles 

enter image description here Wie kann ich verwandle die ROI ein 8-Bit-Bild zu werden oder nicht den Fehler bedeuten etwas anderes

Vielen Dank im Voraus!

Edit:

enter image description here

+1

können Sie 'Bild' in Graustufen konvertieren. Verwenden Sie 'cv2.cvtColor (..., COLOR_BGR2GRAY)' – Miki

+0

@Miki Wenn ich das Graustufenbild verwende, gibt es mir einen weiteren Fehler, ich habe meine Frage mit dem Bild verbessert. – Loanb222

+0

@Miki Es gibt immer noch den gleichen Fehler mit Runde. – Loanb222

Antwort

0

Danke Miki und bpachev für die Hilfe!

Der erste Fehler bedeutet, dass Sie es konvertieren wie diese bedeutet

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

Und der NoneType Fehler in Graustufen, dass keine Kreise so gefunden wurden, um den Fehler advoid Sie diese if-Anweisung hinzufügen

if circles is not None: 
    circles = numpy.round(circles[0, :]).astype("int") 

Da dann keine Kreise gefunden wurden, in denen ich wusste, dass es Kreise gab, musste ich mit den Einstellungen des Detektors herumspielen.