2016-05-25 20 views
6

Ho provato a riprodurre un video da un file, come indicato nelle esercitazioni. Il mio programma è stato il seguente:Errore OpenCV: (-215) scn == 3 || scn == 4 in function 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() 

Ma ho ottenuto il seguente errore:

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 

ho controllato ret e si è rivelato essere falso. Quindi il vero problema è con il salvataggio del video. Ho usato il seguente codice per salvare 'output.avi' utilizzando la funzione VideoWriter:

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() 

io non sono in grado di aprire 'output.avi', anche utilizzando VLC

+0

Si ottiene questo errore sul primo fotogramma o poi nel video? Puoi dare un'occhiata al tuo 'frame' prima di fare' cvtColor'? E 'quello che ti aspetteresti? – Sunreef

+0

@Sunreef Sto ricevendo lo stesso errore ma più avanti nel video. Puoi suggerire qualcosa qui? Grazie – iDilip

risposta

4

Primo:

controllo ret valore con: ret == true

in secondo luogo, come ha detto tutorial:

assicurarsi le versioni corrette di ffmpeg o gstreamer è installato. A volte, è un mal di testa lavorare con Video Capture principalmente a causa dell'errata installazione di ffmpeg/gstreamer.

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

controllare Infine il codec video: Can't open video with opencv2

+0

Grazie, ho controllato il valore di ret e si è rivelato essere falso –

+0

Immagino che il mio problema sia effettivamente in 'output.avi'. L'ho creato usando cv2.VideoWriter ('output.avi', fourCc, 20.0, (640.480)) –

2

cambiare il "mentre" - parametro loop per "ret" - e l'ordine del cap.read() - ret è True se c'è un frame successivo valido nel flusso video/file.

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

Ho avuto lo stesso errore. Ma il problema era dovuto a un pacchetto mancante. Non è stato rilevato durante l'utilizzo di un notebook jupyter, ma è apparso quando ho eseguito il .py attraverso il terminale.

sudo apt-get install python-tk 

Questo risolto l'errore per me, spero che aiuta qualcun altro troppo :)

Problemi correlati