2016-05-25 61 views
6

我試圖從文件中播放視頻,如教程中給出的。我的程序如下:OpenCV錯誤:(-215)scn == 3 || scn == 4在函數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() 

但我得到了以下錯誤:

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 

我檢查RET,它原來是假的。 所以實際的問題是保存視頻。我用下面的代碼保存 'output.avi' 使用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() 

我無法打開 'output.avi',即使使用VLC

+0

你得到的第一幀或以後在視頻這個錯誤?你可以在做'cvtColor'之前看看你的'frame'嗎?這是你期望的嗎? – Sunreef

+0

@Sunreef我得到同樣的錯誤,但後來在視頻中。你能在這裏建議一些事嗎?謝謝 – iDilip

回答

4

第一:

檢查RET與價值:滯留==真

其次爲教程說:

做的ffmpeg或了GStreamer確保正確版本的安裝。有時,使用視頻捕捉工作很頭疼,主要是由於ffmpeg/gstreamer安裝錯誤。

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

最後檢查視頻編解碼器: Can't open video with opencv2

+0

謝謝,我檢查了ret的值,結果是錯誤的 –

+0

我想我的問題實際上是在'output.avi'中。我使用cv2.VideoWriter('output.avi',fourCc,20.0,(640,480))創建了它 –

2

更改 「而」 - 循環參數爲 「RET」 - 兼)cap.read的順序( - RET如果視頻/文件流中存在有效的下一幀,則爲True。

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

我曾遇到過同樣的錯誤。但這個問題是由於缺少一攬子計劃。在使用jupyter筆記本時沒有檢測到,但是當我通過終端運行.py時出現。

sudo apt-get install python-tk 

這解決了我的錯誤,希望它可以幫助別人太:)

相關問題