У меня есть следующие кадры чтения кода из папки. Мои видеокадры хранятся в формате frame0.jpg, frame1.jpg. Мне нужно прочитать последовательность кадров. Я запускаю код ниже, но результат, который я получаю, не тот, который мне нужен.
filenames = [img for img in glob.glob("video-frames/*.jpg")]
filenames.sort()
images = []
for img in filenames:
n= cv2.imread(img)
images.append(n)
print(img)
полученный результат:
video-frames\frame0.jpg
video-frames\frame1.jpg
video-frames\frame10.jpg
video-frames\frame100.jpg
video-frames\frame101.jpg
Я хочу, чтобы вывод считывал кадры последовательно, как показано ниже.
video-frames\frame0.jpg
video-frames\frame1.jpg
video-frames\frame2.jpg
Спасибо
@Thymen, спасибо за ваше замечательное предложение. Не могли бы вы опубликовать свой ответ, чтобы другие могли получить лучшую видимость?
Файлы обычно считываются с диска в алфавитном порядке. Это означает, что xxx10.jpg читается перед xxx1.jpg. Таким образом, вы должны добавить ведущие нули к именам ваших файлов. Затем чтение их в алфавитном порядке загрузит xxx01, xxx02, ... xxx10... до xxx99. Используйте больше ведущих нулей, если у вас больше 99
Попробуй это
files_list = os.listdir('/content/test1') # use your folderpath here
files_list.sort(key=lambda f: int(re.sub('\D', '', f)))
например,
files_list = ['frame0.jpg','frame1.jpg','frame10.jpg','frame100.jpg',
'frame101.jpg','frame2.jpg','frame20.jpg','frame3.jpg']
files_list.sort(key=lambda name: int(re.sub('\D', '', name)))
Выход сверху
['frame0.jpg',
'frame1.jpg',
'frame2.jpg',
'frame3.jpg',
'frame10.jpg',
'frame20.jpg',
'frame100.jpg',
'frame101.jpg']
Другой путь. Пытаться:
filenames = sorted(filenames, key=lambda x: int("".join([i for i in x if i.isdigit()])))
Вот один из примеров.
Когда файлы создаются в исходном порядке, вы можете использовать время их создания для сортировки.
import os
filenames = [img for img in glob.glob("video-frames/*.jpg")]
filenames.sort(key=os.path.getctime)
или
import os
filenames = [img for img in glob.glob("video-frames/*.jpg")]
filenames = sorted(filenames, key=os.path.getctime)
Вы можете использовать время, которое они созданы.
filenames = sorted(filenames, key=os.path.getctime)
илиfilenames.sort(key=os.path.getctime)
, если они были сгенерированы в правильном порядке.