web-dev-qa-db-fra.com

Erreur OpenCV: (-215) size.width> 0 && size.height> 0 in function imshow

J'essaie de créer un système de suivi du visage associant la classification Haar Cascade à la détection de bonnes fonctionnalités de Lucas Kanade. Cependant, je continue à avoir une erreur que je ne peux pas comprendre ce que cela signifie ni comment le résoudre.

Quelqu'un peut-il m'aider?

Erreur:

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

Ce message d'erreur 

erreur: (-215) size.width> 0 && size.height> 0 in function imshow 

cela signifie simplement que imshow () n'obtient pas d'image vidéo de périphérique d'entrée . Vous pouvez essayer d'utiliser 

cap = cv2.VideoCapture(1) 

au lieu de 

cap = cv2.VideoCapture(0) 

& voyez si le problème persiste encore. 

13
Gauranga

J'ai le même problème, réparer le ret en capture vidéo

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

Vous devez retarder

Exemple de code:

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
박광유

J'ai également fait face à ce problème et je le résous en modifiant le chemin de l'image, car si le chemin contient (par exemple:\n ou\t ou\a), la corruption sera altérée, il vous suffira donc de changer chaque barre oblique inversée "\" avec avant. -slash "/" et cela ne fera aucune erreur mais ne résoudra que le problème du chemin de lecture

3
abadymoezain

Dans ces deux lignes:

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

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

essayez plutôt:

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

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

J'ai eu le même problème et les variables étaient retournées vides

1
Zed86M

cv2.circle et cv2.lines ne fonctionnent pas. Le masque et le cadre renvoient tous les deux None. ces fonctions (ligne et cercle) sont dans l'openv 3 mais pas dans les versions antérieures.

0
Irum Zahra Awan

J'utilise ssh pour me connecter au serveur distant et que le code python exécute cv2.VideoCapture (0) pour capturer la webcam distante, puis je rencontre le message d'erreur suivant:

erreur: (-215) size.width> 0 && size.height> 0 in function imshow

Enfin, je dois accorder l'accès à/dev/video0 (qui est mon périphérique de webcam) avec mon compte d'utilisateur et le message d'erreur a disparu. Utilisez usermod pour ajouter un utilisateur à la vidéo du groupe

usermod -a -G video user
0
allenyllee

C’est un problème de consommation d’espace ou de choix de la mauvaise caméra ..__Ma suggestion de redémarrer le noyau, d’effacer la sortie et de la réexécuter . Cela fonctionne alors.

0
Par bas

J'ai également rencontré le message d'erreur dans Raspberry Pi 3, mais ma solution est de recharger le noyau de la caméra après une recherche sur Google, en espérant qu'il puisse vous aider.

Sudo modprobe bcm2835-v4l2

BTW, pour cette erreur s'il vous plaît vérifier votre caméra et le chemin du fichier est réalisable ou non

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)

J'ai aussi rencontré ce problème. Dans mon cas, le chemin de l'image est incorrect, donc img read est NoneType. Après avoir corrigé le chemin de l'image, je peux l'afficher sans problème.

0
jdhao