python image opencv computer-vision opencv3.0

python - Error de OpenCV:(-215) size.width> 0 && size.height> 0 en la función imshow



image computer-vision (11)

Compruebe si tiene "opencv_ffmpeg330.dll" en el directorio raíz de python27 o de la versión de Python que está utilizando. Si no, lo encontrará en ".... / OpenCV / opencv / build / bin" .

Elija la versión adecuada y copie el dll en el directorio raíz de su instalación de python y vuelva a ejecutar el programa

Estoy tratando de hacer un rastreador de cara que combine la Clasificación Haar Cascade con la detección de características de Lucas Kanade. Sin embargo, sigo recibiendo un error que no puedo entender lo que significa ni cómo resolverlo.

¿Me puede ayudar alguien?

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

Código:

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()


En estas dos líneas:

mask = cv2.line(mask, (a,b),(c,d), color[i].tolist(), 2) frame = cv2.circle(frame,(a, b),5,color[i].tolist(),-1)

prueba en su lugar:

cv2.line(mask, (a,b),(c,d), color[i].tolist(), 2) cv2.circle(frame,(a, b),5,color[i].tolist(),-1)

Tuve el mismo problema y las variables se devolvían vacías


Este mensaje de error

error: (-215) size.width> 0 && size.height> 0 en la función imshow

simplemente significa que imshow () no está recibiendo un video de un dispositivo de entrada. Puedes intentar usar

cap = cv2.VideoCapture(1)

en lugar de

cap = cv2.VideoCapture(0)

y ver si el problema persiste.


Esto es un problema con el consumo de espacio o elegir la cámara incorrecta. Mi sugerencia es reiniciar Kernel y borrar el resultado y ejecutarlo nuevamente. Funciona entonces


También encontré el mensaje de error en raspberry pi 3, pero mi solución es volver a cargar el núcleo de la cámara después de buscar en google, espero que pueda ayudarlo.

sudo modprobe bcm2835-v4l2

Por cierto, para este error, compruebe que la cámara y la ruta del archivo son factibles o no


También me enfrenté a este problema y lo resolví cambiando la ruta de la imagen, porque si la ruta contiene (por ejemplo: / n o / t o / a) se dañará, así que simplemente cambie cada barra invertida "/" con el frente -slash "/" y no hará ningún error solo soluciona el problema de la lectura de la ruta


Tengo el mismo problema, arregle el ret en el video de captura

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()


Tienes que retrasar

Código de ejemplo:

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()


Yo uso ssh para conectarme al servidor remoto y tengo el código python ejecutando cv2.VideoCapture (0) para capturar cámara web remota, luego encuentro este mensaje de error:

error: (-215) size.width> 0 && size.height> 0 en la función imshow

Finalmente, tengo que otorgar acceso a / dev / video0 (que es mi dispositivo de cámara web) con mi cuenta de usuario y el mensaje de error desapareció. Use usermod para agregar usuario a video grupal

usermod -a -G video user


cv2.circle y cv2.lines no funcionan. Máscara y marco ambos están regresando None . estas funciones (línea y círculo) están en opencv 3 pero no en versiones anteriores.


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)