Ich habe ein Video aufgezeichnet, um den Kaskadenklassifizierer zu testen. Ich schrieb ein Skript wie folgt, um aufzuzeichnen, wie oft der Kaskadenklassierer mein Gesicht im kurzen Video erkennt.Opencv Fehler: Assertion fehlgeschlagen (scn == 3 || scn == 4) in ipp_cvtColor
import cv2
import numpy as np
face_cascade = cv2.CascadeClassifier('./data/cascade.xml')
cap = cv2.VideoCapture('/home/jianyepa/opencv-learning/output.avi')
count = 0
print cap.isOpened()
while 1:
ret, frame = cap.read()
gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
faces = face_cascade.detectMultiScale(gray, 1.3,5)
for (x,y,w,h) in faces:
cv2.rectangle(frame,(x,y),(x+w,y+h),(255,0,0),2)
roi_gray = gray[y:y+h,x:x+w]
roi_color = frame[y:y+h,x:x+w]
count += 1
print 'face detected'
cv2.imshow('frame',frame)
if cv2.waitKey(10) & 0xFF == ord('q'):
break
print count
cap.release()
cv2.destroyAllWindows()
Irgendwie, wenn ich das Video zu Ende spielen, wird es die folgende Ausgabe
True
face detected
face detected
face detected
OpenCV Error: Assertion failed (scn == 3 || scn == 4) in ipp_cvtColor, file /home/jianyepa/opencv-3.1.0/modules/imgproc/src/color.cpp, line 7456 Traceback (most recent call last): File "cascade.py", line 11, in gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY) cv2.error: /home/jianyepa/opencv-3.1.0/modules/imgproc/src/color.cpp:7456: error: (-215) scn == 3 || scn == 4 in function ipp_cvtColor
jedoch zeigen, wenn ich das Video, bevor es Ende beenden, wird die Ausgabe wie
erwartetTrue
face detected
face detected
2
Kann jemand eine Idee geben, was passiert? Danke.
Nach 'ret, frame = cap.read()', ob 'Rahmen nicht None' ist – ZdaR
@ZdaR Sorry, ich kann Sie bekommen, ist es hinzuzufügen' wenn frame nicht ist None: 'then' continue'? –
Es hängt von Ihnen ab, was Sie tun möchten, wenn frame keins ist, Sie können 'continue',' print "Frame empty" 'oder einen Zähler leerer Frames usw. beibehalten. Es ist jedoch sehr unwahrscheinlich, dass Sie einen leeren Frame erhalten Mitte des Stroms. – ZdaR