У меня есть следующий код, в котором я читаю данные из папки, я хочу ограничить количество кадров в секунду до 5fps, 10fps, 15fps, 20fps, 25fps при чтении из папки. Когда я запускаю код ниже, мой код зависает, и я сомневаюсь, что используемый ниже подход неверен.
filenames = [img for img in glob.glob("video-frames/*.jpg")]
fps = 5
#calculate the interval between frame.
interval = int(1000/fps)
filenames = sorted(filenames, key=os.path.getctime) or filenames.sort(key=os.path.getctime)
images = []
for img in filenames:
n= cv2.imread(img)
time.sleep(interval)
images.append(n)
print(img)
Помощь очень ценится, если кто-то поможет мне в этом отношении.
Я думаю, вы можете использовать это соотношение для расчета интервалов:
delay = int((1 / int(fps)) * 1000)
Здесь я переписал ваш код с помощью приведенной выше формулы. Также я добавил cv2.imshow()
для показа изображений и cv2.waitKey
для задержки.
import cv2
import os
import glob
file_names = [img for img in glob.glob("video-frames/*.jpg")]
fps = 5
# calculate the interval between frames.
delay = int((1 / int(fps)) * 1000)
file_names = sorted(file_names, key=os.path.getctime) or file_names.sort(key=os.path.getctime)
images = []
# Creating a window for showing the images
cv2.namedWindow('images', cv2.WINDOW_NORMAL)
for path in file_names:
image = cv2.imread(path)
# time.sleep(interval)
cv2.waitKey(delay)
# Show an image
cv2.imshow('images', image)
images.append(image)
print(path)
Спасибо, @MohammadHosseinZiyaaddini, не могли бы вы сообщить мне, почему вы умножаете это на 1000?
@goharshah YW. Пожалуйста, следите за этой темой.
Если вы спите в течение 200 секунд (1000/5), он будет казаться зависшим.