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)