Я пытаюсь сделать трекер лица, сочетающий в себе каскадную классификацию Хаара и хорошее определение признаков Лукаса Канаде. Однако я постоянно получаю ошибку, которую не могу понять, что она означает и как ее решить.
Может ли кто-нибудь помочь мне в этом?
Ошибка:
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()
Данное сообщение об ошибке
ошибка: (-215)size.width>0 && size.height>0 в функции imshow
означает, что функция imshow() не получает видеокадр с устройства ввода. Можно попробовать использовать
cap = cv2.VideoCapture(1)
вместо
cap = cv2.VideoCapture(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()
Я тоже столкнулась с этой проблемой и решить ее, изменив путь к файлу, потому что если путь содержит (например: \N или \T или \А) он сделает коррупцию так просто поменять все обратно-Слэш " и\" с передним слешем-то "/" и он не допустил ни одной ошибки только исправить проблему чтения путь
Приходится откладывать
Пример кода:
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()
В этих двух строках:
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)
У меня была такая же проблема и переменные были возвращены пустые
Эта ошибка также показывает, когда видео играет нормально и скрипт завершится, но эту ошибку всегда бросает за imshow() будут вам пустые рамки после того, как все кадры были использованы.
Это особенно актуально если вы играете короткие (несколько секунд) видео файл и вы не'т заметил, что видео на самом деле играет на фоне (за свой редактор кода) и после этого скрипт заканчивается, что ошибка.
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)
Я также встречал сообщения об ошибке в малина Pi 3, но мое решение-перезагрузить ядра камеру после поиска в гугле, надеюсь он сможет помочь вам.
судо bcm2835-v4l2 команды modprobe
Кстати, за эту ошибку, пожалуйста, проверьте вашу камеру и путь к файлу является работоспособным или нет
Хотя это старый нить, я получил эту ошибку также и решение, которое работает для меня здесь не сказано.
Проще говоря, в моем случае камера была все еще в использовании на фоне, как я увидел свет на. Я еще не смог воспроизвести проблему, поэтому я'м не уверен, что простые cv2.Захватить видео(0).выпуск()` бы решил ее. Я'будете редактировать этот пост, если и когда я нашел его.
Для меня перезапуск компьютера решить проблему, ничего не меняя в коде.
Я использую SSH для подключения к удаленному серверу и код Python выполнить cv2.Захватить видео(0), чтобы захватить удаленный веб-камеры, затем возникнуть сообщение об ошибке:
ошибка: (-215)размер.ширина и gt;0 && размер.высота и gt;0 в функции imshow
Наконец, я должен предоставить доступ к /dev/video0 (который является моим веб-камеру) с моей учетной записи пользователя и сообщение об ошибке пропало. Использовать usermod для добавления пользователей в группу видео
usermod -a -G video user
`cv2.круг и cv2.линии не работают. Маски и рамы возвращаются "нет". эти функции (линии и окружности) в OpenCV 3, но не в более старых версиях.
Проверьте, если у вас есть "и opencv_ffmpeg330.dll файлы на" в корневой папке python27 или версию Python вы используете. Если вы не найдете его в то"....\В формате OpenCV\рад\строить\бин" по.
Выберите подходящую версию и скопируйте DLL в корневой папке вашей установки Python и повторно запустить программу
Просто используйте расширение изображения как .в формате JPEG "или".ПНГ
.