2017-04-01 3 views
0

Ich mache gerade Echtzeit-Objekterkennung eines orangen Balls mit Raspberry Pi 3 Model B. Der Code unten soll einen Frame nehmen, dann mit dem cv2.inRange() Funktion, filtern Sie das Bild mit RGB (BGR). Dann wende ich Dialerung und Erosion an, um Rauschen zu entfernen. Dann finde ich die Konturen und zeichne sie. Dieser Code hat bis jetzt funktioniert. Jedoch, wenn ich es ohne Änderung es heute lief, habe ich den Folowing Fehler:Python OpenCV: inRange() funktioniert nicht mehr ohne Änderung

Traceback (most recent call last): 
File "/home/pi/Desktop/maincode.py", line 12, in <module> 
    mask = cv2.inRange(frame, lower, upper) 
error: /build/opencv-ISmtkH/opencv-2.4.9.1+dfsg/modules/core/src/arithm.cpp:2701: error: (-209) The lower bounary is neither an array of the same size and same type as src, nor a scalar in function inRange 

Jede Hilfe wäre wirklich genial, weil ich zu OpenCV neu war und viel Zeit proggraming dies verbracht, und ich habe eine competetion der Robotik in 5 Tagen.

Vielen Dank im Voraus

  import cv2 
      import cv2.cv as cv 
      import numpy as np 


      capture = cv2.VideoCapture(0) 
      while capture.isOpened: 
        ret, frame = capture.read() 
        im = frame 
        lower = np.array([0, 100 ,150], dtype = 'uint8') 
        upper = np.array([10,180,255], dtype = 'uint8') 
        mask = cv2.inRange(frame, lower, upper) 
        eroded = cv2.erode(mask, np.ones((7, 7))) 
        dilated = cv2.dilate(eroded, np.ones((7, 7))) 
        contours, hierarchy = cv2.findContours(dilated,cv2.RETR_TREE,cv2.CHAIN_APPROX_SIMPLE) 

        cv2.drawContours(im,contours,-1,(0,255,0),3) 
        cv2.imshow('colors',im) 
        cv2.waitKey(1) 
+0

Sind Sie sicher, dass der Rahmen, den Sie in 'mask = cv2.inRange (frame, lower, upper) einspeisen' nicht leer ist? Versuchen Sie 'frame.shape' vor dieser Anweisung auszudrucken. – ZdaR

Antwort

0

Der Fehler, den Sie mit ziemlicher Sicherheit erhalten bedeutet, dass Sie ein leeres Bild (oder Sie die Größe Ihrer Eingangsbild mischen).

Webcam-Captures in OpenCV beginnen oft mit einem oder ein paar schwarz/empty Images (crappy drivers). Da es zu schnell geht, merkt man das nicht. Dies hat jedoch Einfluss auf Ihre Anwendung, wenn Sie das Bild bearbeiten möchten. Daher empfehle ich Ihnen, das Bild zu überprüfen, bevor Sie mit den Berechnungen darauf fortfahren. Fügen Sie einfach diese nach Ihrer capture.read() Linie:

if ret == True: 

Hinweis: sicherstellen, (indem Sie in der Konsole oder etwas gedruckt wird), dass dies geschieht nur, wenn Sie anfangen zu erfassen. Wenn dies regelmäßig passiert (leere Frames von Ihrer Webcam), ist möglicherweise etwas anderes nicht in Ordnung (oder vielleicht mit Ihrer Webcam). Überprüfen Sie es auch auf einem anderen Computer.

+0

Danke !!!! Kann ein Stromausfall ein Problem sein? –

+0

Ich hoffe, das hat dein Problem behoben! Wenn das Problem nur bei den ersten Frames auftritt, machen Sie sich keine Sorgen. Ich habe das auch mit mehreren Webcams. Wenn es später noch passiert, könnte es tatsächlich ein Hardware-Problem sein. Stellen Sie sicher, dass der Pi genug Strom bekommt. Versuchen Sie auch, es mit einer anderen Webcam oder mit Ihrer ursprünglichen Webcam auf einem anderen Computer zu testen. Überprüfen Sie, ob das Problem weiterhin auftritt. Viel Glück mit Ihrer Konkurrenz! Auch, wenn diese Antwort Ihr Problem gelöst hat, vergessen Sie nicht, es als Antwort zu akzeptieren! – Jurjen

Verwandte Themen