OpenCV + Python: Fehler bei Color filtering

  • Moin,
    für eine Facharbeit setzte ich mich gerade mit dem Raspberry Pi, OpenCV und Python auseinander...alles neu für mich :shy:

    Folgendes Problem: Ich sitze gerade an einem Tutorial und bin so zu folgendem Code gekommen:

    import cv2
    import numpy as np

    cap = cv2.VideoCapture(1)

    while True:
    _, frame = cap.read()
    hsv = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV)

    lower_red = np.array([0,0,0])
    upper_red = np.array([255,255,255])

    mask = cv2.inRange(hsv, lower_red, upper_red)
    res = cv2.bitwise_and(frame, frame, mask = mask)

    cv2.imshow('frame', frame)
    cv2.imshow('mask', mask)
    cv2.imshow('res', res)

    k = cv2.waitKey(5) & 0xFF
    if k == 27:
    break

    cv2.destroyAllWindows()
    cap.release()

    Wenn ich das Programm ausführe kommt folgende Fehlermeldung:

    Traceback (most recent call last):
    File "/home/pi/filtering.py", line 8, in <module>
    hsv = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV)
    cv2.error: /home/pi/opencv-3.1.0/modules/imgproc/src/color.cpp:8141: error: (-215) (scn == 3 || scn == 4) && (depth == CV_8U || depth == CV_32F) in function cvtColor


    Den Code bin ich mehrmals durchgegangen darum glaube ich nicht, dass der Fehler im Code ist.
    Ich weiß das der Fehler der Befehl: hsv = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV) Probleme macht.
    Ich benutze Python 3.4.2, OpenCV 3.1.0 und den Raspberry Pi 3. Der im Tutorial benutzt aber Python 3.5.
    Im Internet habe ich bisher nichts hilfreiches gefunden.


    Vielen Dank im Voraus

  • Sieht so aus als ob dein Bildformat nicht stimmt, das du capturest. scn steht fuer die Nummer der Kanaele (BGR oder BGRA), und depth fuer 8 Bit oder float. Lass dir mal ausgeben, was depth und channels von frame sind (mit ein bisschen Glueck nur "print(frame)"...)

  • Moin __deets__ ,

    vielen Dank schon mal.

    Ich habe unter "hsv = cv2.cvtColor..." "print(frame)" gesetzt und "None" wurde mir wiedergegeben. Sobald ich den Befehl ein Stück weiter unten eingebe, wird wegen dem Fehler das Programm gleich beendet.
    Wenn ich "print(frame, depth)" bzw "print(frame, channel)" eingebe, kommt die Meldung das depth/channel nicht definiert ist.

    Wo und wie sollte ich das eingeben?
    Entschuldige. Habe mit Python gerade erst angefangen :denker:

  • Wenn frame None ist, dann bekommst du gar keine Bilder, und dann kannst du auch nix konvertieren.

    Und programmieren ist nicht raten. Du musst schon darein investieren die Grundlagen zu lernen. "Learn Python the hard way" ist zB ein gutes, freies Buch.

  • Mhh... Ok klingt logisch. Hättest du noch einen Tipp woran das liegen könnte?

    Das weiß ich leider nur zu gut. Mit Python habe ich leider gerade erst angefangen und bin dabei die Grundlagen zu lernen. Allerdings drängt die Zeit etwas^^
    Das Buch werde ich mir mal genauer angucken. Danke

  • Nein, woran das liegt kann ich so nicht sagen. Lies die Dokumentation zu der verwendeten Funktionalitaet durch, da mag ein Hinweis versteckt sein. Auch Warnungen in Konsole oder dem Systemlog koennten Hinweise geben.

    http://docs.opencv.org/2.4/modules/hi…ml#videocapture

    Das einzige was mir auffaellt ist, das du eine 1 uebergibst. Warum?

    Das die Zeit draengt... nunja. Das sind ja ueblicherweise Hausaufgaben irgendeiner Art, und aus meiner eigenen langjaehrigen Erfahrung als Student weiss ich, an wem solche Zeitknappheit nicht lag - jemand anderem...

  • So... ich habe es hinbekommen.

    cap = cv2.VideoCapture(0) ist nur für USB-Cams. Ich habe aber die Raspberry Pi Cam, was natürlich auch gleich andere Befehle mit sich bringt. Das war auch der Grund warum ich keine Bilder bekommen habe. Jetzt bin ich schlauer :D

    Vielen Dank nochmal :thumbs1:

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!