2016-05-25 15 views
6

Ich habe versucht, ein Video aus einer Datei zu spielen, wie in den Tutorials gegeben. Mein Programm war wie folgt:OpenCV-Fehler: (-215) scn == 3 || scn == 4 in der Funktion ipp_cvtColor

import numpy as np 
import cv2 

cap = cv2.VideoCapture('output.avi') 

while(cap.isOpened()): 
    ret, frame = cap.read() 
    frame = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY) 
    cv2.imshow('outVideo',frame) 
    if cv2.waitKey(1) & 0xFF == ord('q'): 
     break 

cap.release() 
cv2.destroyAllWindows() 

Aber ich habe folgende Fehlermeldung:

Traceback (most recent call last): 
    File "playVideo.py", line 8, in <module> 
    frame = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY) 
cv2.error: /home/hp/opencv/modules/imgproc/src/color.cpp:7456: error: (-215) scn == 3 || scn == 4 in function ipp_cvtColor 

Ich habe ret und es stellte sich heraus, falsch zu sein. So ist das eigentliche Problem mit dem Speichern von Video. Ich habe den folgenden Code speichern 'output.avi' mit VideoWriter Funktion:

import numpy as np 
import cv2 

cap = cv2.VideoCapture(0) 
fourCc = cv2.VideoWriter_fourcc(*'XVID') 
out = cv2.VideoWriter('output.avi',fourCc,20.0,(640,480)) 

while(cap.isOpened()): 
    ret, frame = cap.read() 
    if ret==True: 
     frame = cv2.flip(frame,0) 
     out.write(frame) 
     cv2.imshow('frame',frame) 
     if cv2.waitKey(1) & 0xFF == ord('q'): 
      break 
    else: 
     break 

cap.release() 
out.release() 
cv2.destroyAllWindows() 

Ich bin zu öffnen 'output.avi' nicht in der Lage, auch VLC mit

+0

Bekommen Sie diesen Fehler auf dem ersten Frame oder später in dem Video? Kannst du dir deinen 'frame' anschauen, bevor du'cvtColor' machst? Ist es das, was Sie erwarten würden? – Sunreef

+0

@Sunreef Ich bekomme den gleichen Fehler, aber später im Video. Kannst du hier etwas vorschlagen? Danke – iDilip

Antwort

4

Erstens:

Check ret Wert mit: ret == true

Zweite als Tutorien sagte:

Stellen Sie sicher, die richtige Versionen von ffmpeg oder gstreamer installiert ist. Manchmal ist es ein Problem, mit Video Capture zu arbeiten, meistens aufgrund einer falschen Installation von ffmpeg/gstreamer.

aus: http://docs.opencv.org/3.1.0/dd/d43/tutorial_py_video_display.html#gsc.tab=0

überprüfen schließlich den Video-Codec: Can't open video with opencv2

+0

Danke, ich überprüfte den Wert von ret und es stellte sich heraus, dass es falsch ist –

+0

Ich denke, mein Problem ist eigentlich in "output.avi". Ich hatte es mit cv2.VideoWriter erstellt ('output.avi', fourCc, 20.0, (640, 480)) –

2

Ändern der "while" - Schleife Parameter auf "ret" - und die Ordnung des cap.read() - ret ist True, wenn ein gültiger nächster Frame im Video/Datei-Stream vorhanden ist.

import numpy as np 
import cv2 

cap = cv2.VideoCapture('output.avi') 
ret, frame = cap.read() 

while(ret): 
    ret, frame = cap.read() 
    frame = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY) 
    cv2.imshow('outVideo',frame) 
    if cv2.waitKey(1) & 0xFF == ord('q'): 
     break 
    ret, frame = cap.read() 

cap.release() 
cv2.destroyAllWindows() 
0

Ich hatte den gleichen Fehler konfrontiert. Das Problem war jedoch auf ein fehlendes Paket zurückzuführen. Bei Verwendung eines Jupyter-Notebooks wurde es nicht erkannt, aber es zeigte sich, wenn ich das .py-Through-Terminal verwendete. Diese

sudo apt-get install python-tk 

gelöst den Fehler für mich, hoffe, es jemand hilft sonst auch :)

Verwandte Themen