Я пытаюсь сохранить массив 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])