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

匿名 (未验证) 提交于 2019-12-03 01:11:01

问题:

I am trying to make a face tracker that combines Haar Cascade Classification with Lucas Kanade good feature detection. However, I keep getting an error that I cannot figure out what it means nor how to solve it.

Can anyone help me here?

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

回答1:

This error message

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

simply means that imshow() is not getting video frame from input-device. You can try using

cap = cv2.VideoCapture(1)  

instead of

cap = cv2.VideoCapture(0)  

& see if the problem still persists.



回答2:

I have the same problem, fix the ret in capture video

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


回答3:

You have to delay

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


回答4:

I also faced this problem and I solve it by changing the path of the image because if the path contains (for example: \n or \t or \a) it will make corruption so just change every back-slash "\" with front-slash "/" and it will not make any error only fix the issue of reading path



回答5:

In these two lines:

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

try instead:

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

I had the same problem and the variables were being returned empty



回答6:

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) 


回答7:

cv2.circle and cv2.lines are not working. Mask and frame both are returning None. these functions (line and circle) are in opencv 3 but not in older versions.



回答8:

I use ssh to connect to remote server and have python code execute cv2.VideoCapture(0) to capture remote webcam, then encounter this error message:

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

Finally, I have to grant access to /dev/video0 (which is my webcam device) with my user account and the error message was gone. Use usermod to add user into group video

usermod -a -G video user 


回答9:

I also met the error message in raspberry pi 3, but my solution is reload kernel of camera after search on google, hope it can help you.

sudo modprobe bcm2835-v4l2

BTW, for this error please check your camera and file path is workable or not



回答10:

This is a problem with space consumption or choosing the wrong camera. My suggestion in to restart kernel and clear output and run it again. It works then.



回答11:

Check if you have "opencv_ffmpeg330.dll" in python27 root directory or of the python version you are using. If not you will find it in "....\OpenCV\opencv\build\bin".

Choose the appropriate version and copy the dll into the root directory of your python installation and re-run the program



标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!