Невозможно ограничить количество кадров в секунду при чтении кадров python

У меня есть следующий код, в котором я читаю данные из папки, я хочу ограничить количество кадров в секунду до 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)

Помощь очень ценится, если кто-то поможет мне в этом отношении.

Если вы спите в течение 200 секунд (1000/5), он будет казаться зависшим.

Mark Setchell 10.12.2020 19:24
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
1
1
76
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Я думаю, вы можете использовать это соотношение для расчета интервалов:

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?

gohar shah 11.12.2020 18:15

@goharshah YW. Пожалуйста, следите за этой темой.

MohammadHosseinZiyaaddini 12.12.2020 06:49

Другие вопросы по теме