2016-05-25 3 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 

я проверил в отставке, и это оказалось ложным. Таким образом, проблема связана с сохранением видео. Я использовал следующий код, чтобы сохранить '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

Вы получаете эту ошибку на первом кадре или позже в видео? Можете ли вы взглянуть на свой 'frame', прежде чем делать' cvtColor'? Это то, чего вы ожидаете? – Sunreef

+0

@Sunreef Я получаю такую ​​же ошибку, но позже в видео. Вы можете что-то предложить здесь? Спасибо – iDilip

ответ

4

Первая:

проверки RET значение с: == отставке Истинного

Во-вторых, как учебники сказал:

Убедитесь, что соответствующие версии FFmpeg или GStreamer установлен. Иногда головная боль работает с Video Capture в основном из-за неправильной установки 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() - в отставке 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 

Это решало ошибка для меня, надеюсь, что это помогает кто-то другой тоже :)

Смежные вопросы