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