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

Я пытаюсь сделать трекер лица, сочетающий в себе каскадную классификацию Хаара и хорошее определение признаков Лукаса Канаде. Однако я постоянно получаю ошибку, которую не могу понять, что она означает и как ее решить.

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

Ошибка:

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()
Комментарии к вопросу (6)

Данное сообщение об ошибке

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

означает, что функция imshow() не получает видеокадр с устройства ввода. Можно попробовать использовать

cap = cv2.VideoCapture(1) 

вместо

cap = cv2.VideoCapture(0) 

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

Комментарии (0)

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

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()
Комментарии (0)

Я тоже столкнулась с этой проблемой и решить ее, изменив путь к файлу, потому что если путь содержит (например: \N или \T или \А) он сделает коррупцию так просто поменять все обратно-Слэш " и\" с передним слешем-то "/" и он не допустил ни одной ошибки только исправить проблему чтения путь

Комментарии (1)

Приходится откладывать

Пример кода:

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()
Комментарии (0)

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

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)

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

Комментарии (1)

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

Комментарии (1)

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

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

Комментарии (0)
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)
Комментарии (0)

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

судо bcm2835-v4l2 команды modprobe

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

Комментарии (0)

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

Комментарии (0)

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

Проще говоря, в моем случае камера была все еще в использовании на фоне, как я увидел свет на. Я еще не смог воспроизвести проблему, поэтому я'м не уверен, что простые cv2.Захватить видео(0).выпуск()` бы решил ее. Я'будете редактировать этот пост, если и когда я нашел его.

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

Комментарии (0)

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

ошибка: (-215)размер.ширина и gt;0 && размер.высота и gt;0 в функции imshow

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

usermod -a -G video user
Комментарии (0)

`cv2.круг и cv2.линии не работают. Маски и рамы возвращаются "нет". эти функции (линии и окружности) в OpenCV 3, но не в более старых версиях.

Комментарии (0)

Проверьте, если у вас есть "и opencv_ffmpeg330.dll файлы на" в корневой папке python27 или версию Python вы используете. Если вы не найдете его в то"....\В формате OpenCV\рад\строить\бин" по.

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

Комментарии (1)

Просто используйте расширение изображения как .в формате JPEG "или".ПНГ.

Комментарии (0)