Python & OpenCV: «ошибка: (-215) scn == 3 || scn == 4 в функции ipp_cvtColor» при попытке сохранить видео - PullRequest
0 голосов
/ 20 сентября 2018

В течение некоторого времени я боролся со следующими строками кода на mac, которые возвращали мне ошибку

error: (-215) scn == 3 ||scn == 4 в функции ipp_cvtColor "

в строке, где я пытаюсь написать свое видео out.write(out_frame)

Вот мой код:

import numpy as np
import cv2
from scipy import ndimage, misc

dir_vid='/Users/qandre/Pictures/Videos/video_input.mp4'
cap = cv2.VideoCapture(dir_vid)

fps = cap.get(cv2.CAP_PROP_FPS)
w = cap.get(cv2.CAP_PROP_FRAME_WIDTH)
h = cap.get(cv2.CAP_PROP_FRAME_HEIGHT)

fourcc = cv2.VideoWriter_fourcc('m','p','4','v')
out = cv2.VideoWriter('/Users/qandre/Pictures/Videos/video_output.mp4', fourcc, int(fps), (int(w), int(h)), isColor=False)
if not out :
    print("!!! Failed VideoWriter: invalid parameters")
    sys.exit(1)

while(cap.isOpened()):
    ret, frame = cap.read()

    if ret is True:
        gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
    else:
        continue

    edges = cv2.Canny(gray,50,150)
    out.write(edges)

    # Display the resulting frame
    cv2.imshow('frame',edges)
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break

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

Итак ... Что может быть не так?

Я должен уточнить, что я получаю эту ошибку только при повороте кадра в оттенках серого благодаря функции cvtColor ().

1 Ответ

0 голосов
/ 20 сентября 2018

Я нашел ответ на свою проблему:

.MP4 искал 3-канальное изображение BGR для записи, но я предоставлял ему только одноканальное изображение, так как пытался написать градации серого.image

Попытка сделать это:

dge = cv2.cvtColor (edge, cv2.COLOR_GRAY2BGR)

преобразовала мое изображение в градациях серого в изображение BGR.В то время как значения моих пикселей остаются серыми, это превращает края в 3-канальное изображение и, таким образом, теперь оно работает.

...