Как сохранить массив NumPy в видео файл без сжатия - PullRequest
0 голосов
/ 10 октября 2019

Я пытаюсь сохранить массив numpy в видеофайл и перезагрузить его с помощью opencv, но не могу получить последовательные результаты. Если я перезагружаю видеофайл в массив numpy, все значения меняются. Вот мой код:

Я пробовал другой CV_FOURCC, например -1, но ни один из них не работает.

from tqdm import tqdm
import numpy as np
import cv2

def frames_to_video(filename, frames, h=None, w=None, fps=15, verbose=True):
    """                                                                                                                                                
    :param filename: supported format: *.avi                                                                                                           
    :return: None                                                                                                                                      
    """
    if h is None or w is None:
        h, w = frames[0].shape[:2]
        if verbose:
            frames = tqdm(frames)
        #out = cv2.VideoWriter(str(filename), cv2.cv.CV_FOURCC('p','n','g',' '), fps, (w, h), True)                                                    
        out = cv2.VideoWriter(str(filename), 0, fps, (w, h), True)
        for frame in frames:
            # frame = cv2.cvtColor(frame, cv2.COLOR_RGB2BGR)                                                                                           
            # VideoWriter expects BGR                                                                                                                  
            out.write(frame)

        out.release()

cap = cv2.VideoCapture("some_video.mp4")
frames = []
while True:
    ret, frame = cap.read()
    if not ret:
        break
    frames.append(frame)

print(frames[0][0][0])
frames_to_video("video2.avi", frames)

cap_2 = cv2.VideoCapture("video2.avi")

frames_2 = []
while True:
ret, frame = cap.read()
    if not ret:
        break
    frames.append(frame)

print(frames[0][0][0])
frames_to_video("video2.avi", frames)

cap_2 = cv2.VideoCapture("video2.avi")

frames_2 = []
while True:
    ret, frame = cap_2.read()
    if not ret:
        break
    frames_2.append(frame)
print(frames_2[0][0][0])
import numpy.testing as npt
npt.assert_almost_equal(frames[0], frames_2[0], decimal=2)
print(frames[0][0])
print(frames_2[0][0])

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...