Подтвердить что ты не робот

Ошибка OpenCV: (-215) size.width> 0 && size.height> 0 в функции imshow

Я пытаюсь сделать Face Tracker, который сочетает в себе классику Хаара Каскада с хорошим признанием функции Lucas Kanade. Тем не менее, я продолжаю получать ошибку, что не могу понять, что это значит и как ее решить.

Может ли кто-нибудь помочь мне здесь?

Ошибка:

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

Код:

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

Ответ 1

Это сообщение об ошибке

ошибка: (-215) size.width > 0 && & size.height > 0 в функции imshow

просто означает, что imshow() не получает видеокадр с устройства ввода.  Вы можете попробовать использовать

cap = cv2.VideoCapture(1) 

вместо

cap = cv2.VideoCapture(0) 

& проверьте, сохраняется ли проблема.

Ответ 2

У меня та же проблема, исправьте ret в захвате видео

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

Я также столкнулся с этой проблемой, и я решил ее, изменив путь к изображению, потому что, если путь содержит (например:\n или \t или\a), это приведет к повреждению, поэтому просто измените каждую обратную косую черту "\" с front -slash "/", и он не будет делать никаких ошибок, только исправит проблему чтения пути

Ответ 4

Вы должны задержать

Пример кода:

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

Ответ 5

В этих двух строках:

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

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

попробуйте вместо этого:

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

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

У меня была та же проблема, и переменные возвращались пустым

Ответ 6

Я также встречал эту проблему. В моем случае путь к изображению неверен, поэтому чтение img - NoneType. После того как я исправлю путь к изображению, я могу показать его без каких-либо проблем.

Ответ 7

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)

Ответ 8

cv2.circle и cv2.lines не работают. Маска и рамка возвращаются None. эти функции (строка и круг) находятся в opencv 3, но не в более старых версиях.

Ответ 9

Я использую ssh для подключения к удаленному серверу и выполняю код python cv2.VideoCapture(0) для захвата удаленной веб-камеры, а затем встретите это сообщение об ошибке:

ошибка: (-215) size.width > 0 && & size.height > 0 в функции imshow

Наконец, я должен предоставить доступ к /dev/video 0 (который является моим устройством веб-камеры) с моей учетной записью пользователя, и сообщение об ошибке исчезло. Используйте usermod для добавления пользователя в групповое видео

usermod -a -G video user

Ответ 10

Я также встретил сообщение об ошибке в малине pi 3, но мое решение перезагружает ядро ​​камеры после поиска в google, надеюсь, что это может вам помочь.

sudo modprobe bcm2835-v4l2

Кстати, для этой ошибки проверьте свою камеру и путь к файлу работоспособен или нет

Ответ 11

Это проблема с потреблением места или выбором неправильной камеры. Мое предложение перезапустить ядро и очистить вывод и запустить его снова. Это работает тогда.

Ответ 12

Хотя это старый поток, я также получил эту ошибку, и решение, которое работало для меня, здесь не упоминается.

Проще говоря, в моем случае веб-камера все еще использовалась на заднем плане, так как я видел, что светодиодный индикатор включен. Я еще не смог воспроизвести проблему, поэтому я не уверен, что простой cv2.VideoCapture(0).release() решил бы ее. Я отредактирую этот пост, если и когда узнаю.

Для меня перезапуск моего ПК решил проблему, не меняя ничего в коде.

Ответ 13

импорт cv2

img = cv2.imread(r "C:\Users\Pradheep\Desktop\tetris_block.png")

cv2.imshow("tetrisblock", img) cv2.waitKey(0)

cv2.destroyAllWindows()

в этой простой программе также показывает ошибку

Traceback (most recent call last):

file "C: /Users/Pradheep/Desktop/cvlearn.py", line 5, in <module> cv2.imshow("tetrisblock", img) cv2.error: OpenCV (4.1.0) C:\projects\opencv- python\opencv\modules\highgui\src\window.cpp: 352: ошибка: (-215: утверждение не выполнено) size.width> 0 && size.height> 0 в функции 'cv :: imshow'

Ответ 14

Эта ошибка также показывает, когда видео воспроизводилось нормально и сценарий завершался, но эта ошибка всегда выдается, потому что imshow() будет получать пустые кадры после того, как все кадры будут использованы.

Это особенно актуально, если вы воспроизводите короткий (несколько секунд) видеофайл, и вы не замечаете, что видео действительно воспроизводится на фоне (за вашим редактором кода), и после этого сценарий завершается с этой ошибкой.

Ответ 15

Проверьте, есть ли у вас "opencv_ffmpeg330.dll" корневой каталог python27 или версия python, которую вы используете. Если нет, вы найдете его в "....\OpenCV\opencv\build\bin" .

Выберите подходящую версию и скопируйте dll в корневой каталог вашей установки python и запустите программу

Ответ 16

Просто используйте расширение изображения, например .jpeg или .png.