我使用python将5576张图像组合成30帧/秒的视频。
我尝试了许多在互联网上发布的代码,但是我总是收到此错误。
Process finished with exit code 137 (interrupted by signal 9: SIGKILL)
我查看操作系统的正在杀死我的进程。
我正在使用ubuntu,pycharm,python3.8 64位。
import time
import cv2
import numpy as np
import glob
import re
#Natural key for natural sort
def atoi(text):
return int(text) if text.isdigit() else text
def natural_keys(text):
return [ atoi(c) for c in re.split(r'(\d+)', text) ]
li = []
for filename in glob.glob('det/*.jpg'):
li.append(filename)
li.sort(key=natural_keys)
img_array = []
for filename in li:
img = cv2.imread(filename)
height, width, layers = img.shape
size = (width, height)
img_array.append(img)
time.sleep(0.1)
print(f"Frame #{filename}")
out = cv2.VideoWriter('Video/label_vid.avi', cv2.VideoWriter_fourcc(*'DIVX'), 30, size)
for i in range(len(img_array)):
out.write(img_array[i])
out.release()
答案 0 :(得分:2)
我认为,该过程必须在for filename in li:img = cv2.imread(filename)
中崩溃。您在此处尝试使用cv2.imread()
读取5K图像。假设单个映像的大小在内存中为1MB(这与磁盘大小不同),那么上述过程将占用5GB的内存。在这种情况下,我建议您不要读取所有图像并将其存储在img_array.append(img)
中,而应将帧直接编码为视频流,如下:
out = cv2.VideoWriter('Video/label_vid.avi', cv2.VideoWriter_fourcc(*'DIVX'), 30, size)
for filename in li:
img = cv2.imread(filename)
out.write(img)
out.release()