it-swarm.com.de

OpenCV-Fehler: (-215) size.width> 0 && size.height> 0 in Funktion imshow

Ich versuche, einen Gesichtsverfolger zu entwickeln, der die Haar-Cascade-Klassifizierung mit der guten Funktionserkennung von Lucas Kanade kombiniert. Ich bekomme jedoch immer einen Fehler, dass ich nicht herausfinden kann, was es bedeutet oder wie ich es lösen kann.

Kann mir hier jemand weiterhelfen?

Error:

line 110, in <module>
cv2.imshow('frame',img)
error: /build/buildd/opencv-2.4.8+dfsg1/modules/highgui/src/window.cpp:269: 
error: (-215)size.width>0 && size.height>0 in function imshow

Code: 

from matplotlib import pyplot as plt
import numpy as np

import cv2

face_classifier = cv2.CascadeClassifier('haarcascades/haarcascade_frontalface_default.xml')


cap = cv2.VideoCapture(0)


# params for ShiTomasi corner detection
feature_params = dict( maxCorners = 200,
                       qualityLevel = 0.01,
                       minDistance = 10,
                       blockSize = 7 )

# Parameters for lucas kanade optical flow
lk_params = dict( winSize  = (15,15),
                  maxLevel = 2,
                  criteria = (cv2.TERM_CRITERIA_EPS | cv2.TERM_CRITERIA_COUNT, 10, 0.03))

# Create some random colors
color = np.random.randint(0,255,(100,3))

# Take first frame and find corners in it
ret, old_frame = cap.read()



cv2.imshow('Old_Frame', old_frame)
cv2.waitKey(0)
old_gray = cv2.cvtColor(old_frame, cv2.COLOR_BGR2GRAY)
restart = True
#while restart == True:
face = face_classifier.detectMultiScale(old_gray, 1.2, 4)

if len(face) == 0:
    print "This is empty"

for (x,y,w,h) in face:
    focused_face = old_frame[y: y+h, x: x+w]

cv2.imshow('Old_Frame', old_frame)

face_gray = cv2.cvtColor(old_frame,cv2.COLOR_BGR2GRAY)

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

corners_t = cv2.goodFeaturesToTrack(gray, mask = None, **feature_params)
corners = np.int0(corners_t)

print corners

for i in corners:
    ix,iy = i.ravel()
    cv2.circle(focused_face,(ix,iy),3,255,-1)
    cv2.circle(old_frame,(x+ix,y+iy),3,255,-1)

plt.imshow(old_frame),plt.show()


# Create a mask image for drawing purposes
mask = np.zeros_like(old_frame)

while(1):
    ret,frame = cap.read()
    frame_gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)

    # calculate optical flow
    p1, st, err = cv2.calcOpticalFlowPyrLK(old_gray, frame_gray, corners_t, None, **lk_params)

    # Select good points
    good_new = p1[st==1]
    good_old = corners_t[st==1]

    # draw the tracks
    print "COLORING TIME!"
    for i,(new,old) in enumerate(Zip(good_new,good_old)):
        print i
        print color[i]
        a,b = new.ravel()
        c,d = old.ravel()
        mask = cv2.line(mask, (a,b),(c,d), color[i].tolist(), 2)
        frame = cv2.circle(frame,(a, b),5,color[i].tolist(),-1)
        if i == 99:
            break
    img = cv2.add(frame,mask)

    cv2.imshow('frame',img)
    k = cv2.waitKey(30) & 0xff
    if k == 27:
        break

    # Now update the previous frame and previous points
    old_gray = frame_gray.copy()
    p0 = good_new.reshape(-1,1,2)

cv2.destroyAllWindows()
cap.release()
27
user3377126

Diese Fehlermeldung 

fehler: (-215) size.width> 0 && size.height> 0 in Funktion imshow 

bedeutet einfach, dass imshow () kein Video-Frame vom Eingabegerät erhält . Sie können es mit versuchen 

cap = cv2.VideoCapture(1) 

anstatt 

cap = cv2.VideoCapture(0) 

und sehen, ob das Problem weiterhin besteht. 

13
Gauranga

Ich habe das gleiche Problem, das Ret-Capture-Video zu beheben

import numpy as np
import cv2

# Capture video from file
cap = cv2.VideoCapture('video1.avi')

while True:

    ret, frame = cap.read()

    if ret == True:

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

        cv2.imshow('frame',gray)


        if cv2.waitKey(30) & 0xFF == ord('q'):
            break

    else:
        break

cap.release()
cv2.destroyAllWindows()
9
Brayan Cruz

Du musst warten

Beispielcode:

import cv2
import numpy as np
import time

cam = cv2.VideoCapture(0)
time.sleep(2)

while True:
    ret,frame = cam.read()
    cv2.imshow('webcam', frame)
    if cv2.waitKey(1)&0xFF == ord('q'):
        break

cam.release()
cv2.destroyAllWindows()
3
박광유

Ich bin auch mit diesem Problem konfrontiert und löse es, indem ich den Pfad des Bildes ändere, denn wenn der Pfad enthält (zum Beispiel:\n oder\t oder\a), führt dies zu Korruption. Ändern Sie also einfach jeden Schrägstrich "\" mit der Vorderseite -slash "/" und es wird kein Fehler gemacht, nur das Problem des Lesepfads wird behoben

3
abadymoezain

In diesen zwei Zeilen:

mask = cv2.line(mask, (a,b),(c,d), color[i].tolist(), 2)

frame = cv2.circle(frame,(a, b),5,color[i].tolist(),-1)

stattdessen versuchen:

cv2.line(mask, (a,b),(c,d), color[i].tolist(), 2)

cv2.circle(frame,(a, b),5,color[i].tolist(),-1)

Ich hatte das gleiche Problem und die Variablen wurden leer zurückgegeben

1
Zed86M

cv2.circle und cv2.lines funktionieren nicht. Sowohl Maske als auch Frame geben None zurück. Diese Funktionen (Linie und Kreis) sind in opencv 3 enthalten, nicht jedoch in älteren Versionen.

0
Irum Zahra Awan

Ich verwende ssh, um mich mit dem Remote-Server zu verbinden, und Python-Code muss cv2.VideoCapture (0) ausführen, um die Remote-Webcam zu erfassen.

fehler: (-215) size.width> 0 && size.height> 0 in Funktion imshow

Schließlich muss ich mit meinem Benutzerkonto Zugriff auf/dev/video0 (das ist mein Webcam-Gerät) gewähren, und die Fehlermeldung war verschwunden. Verwenden Sie usermod, um Benutzer in ein Gruppenvideo einzufügen

usermod -a -G video user
0
allenyllee

Dies ist ein Problem mit dem Speicherplatzverbrauch oder der Wahl der falschen Kamera. Mein Vorschlag, den Kernel neu zu starten und die Ausgabe zu löschen und erneut auszuführen.

0
Par bas

Ich habe auch die Fehlermeldung in Raspberry Pi 3 getroffen, aber meine Lösung besteht darin, den Kernel der Kamera nach der Suche bei Google neu zu laden. Ich hoffe, es kann Ihnen helfen.

Sudo modprobe bcm2835-v4l2

Übrigens, für diesen Fehler überprüfen Sie bitte, ob Ihre Kamera und der Dateipfad funktionsfähig sind oder nicht

0
Ethan Kuo
while(cap.isOpened()):

    ret, img = cap.read()
    print img
    if img==None:   #termino los frames?
        break   #si, entonces terminar programa
    #gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
    cv2.imshow('img2',img)

Obwohl dies ein alter Thread ist, habe ich auch diesen Fehler erhalten und die Lösung, die für mich funktioniert hat, wird hier nicht erwähnt.

Einfach gesagt, in meinem Fall war die Webcam im Hintergrund noch in Gebrauch, als ich sah, dass das LED-Licht an war. Ich konnte das Problem noch nicht reproduzieren, daher bin ich mir nicht sicher, ob eine einfache cv2.VideoCapture(0).release() es gelöst hätte. Ich werde diesen Beitrag bearbeiten, wenn ich es herausgefunden habe.

Für mich löste ein Neustart meines PCs das Problem, ohne dass etwas am Code geändert wurde.

0
JKarouta

Ich habe auch dieses Problem getroffen. In meinem Fall ist der Bildpfad falsch, daher lautet das Bild img NoneType. Nachdem ich den Bildpfad korrigiert habe, kann ich ihn ohne Probleme anzeigen.

0
jdhao