it-swarm.com.ru

Ошибка 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()
27
user3377126

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

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

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

cap = cv2.VideoCapture(1) 

вместо 

cap = cv2.VideoCapture(0) 

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

13
Gauranga

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

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()
9
Brayan Cruz

Вы должны отложить

Пример кода:

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()
3
박광유

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

3
abadymoezain

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

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
Zed86M

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

0
Irum Zahra Awan

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

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

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

usermod -a -G video user
0
allenyllee

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

0
Par bas

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

Sudo modprobe bcm2835-v4l2

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

0
Ethan Kuo
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

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

0
jdhao