Как загрузить изображения из папки в последовательности, основанной на числе в имени изображения - PullRequest
0 голосов
/ 18 марта 2019

Я хочу сделать программу для показа изображений 1 на 1 каждую секунду, основываясь на номере кадра в последовательности (изображения приходят из видео, и я уже изменяю его на изображения .jpg с 292 кадрами) , но есть какая-то ошибка, которая заставляет мою программу показывать ее 1 на 1, но не в последовательности, иногда ее скачок (от кадра 1 до 100), а иногда - нет.

import glob
import cv2

img_location = 
'E:\\User\\Programming\\Python\\Work\\asd\\*.jpg'
img_loc = sorted(glob.glob(img_location))
for img in img_loc:
    print('processing %s...' % img,)
    img = cv2.imread(img, 0)
    cv2.imshow("img",img)
    cv2.waitKey(250)

Ответы [ 3 ]

0 голосов
/ 18 марта 2019

Полагаю, вы должны d0 что-то следующим образом

import glob
import cv2
import numpy as np

img_location = 'E:\\User\\Programming\\Python\\Work\\asd\\*.jpg'
img_loc = sorted(glob.glob(img_location))
img_numbers = [int(iloc.split(".")[0]) for iloc in img_loc]
sorted_indices = np.argsort(img_numbers)

for sorted_img_idx in sorted_indices:
    print('processing %s...' % img_loc[sorted_img_idx],)
    img = cv2.imread(img_loc[sorted_img_idx], 0)
    cv2.imshow("img",img)
    cv2.waitKey(250)

Для этого предполагается, что именование файлов выглядит следующим образом: 1.jpg 2.jpg и т. Д. Затем мы удаляем .jpg и конвертируем «1» в int, затем применяем argsort, который возвращает массив индексов, которые соответствуют отсортированному массиву, тогда мы просто перебираем все индексы и отображаем последовательные изображения

АЛЬТЕРНАТИВНЫЙ И ЛЕГКИЙ ПУТЬ:

Если соглашение об именах указано выше, просто выполните

base_path = 'E:\\User\\Programming\\Python\\Work\\asd\\
img_names = [ base_path + str(img_number) + ".jpg"  for img_number in range(1,101)

, а затем перебрать его и отобразить изображения

0 голосов
/ 18 марта 2019

Ffmpeg может воспроизводить папку с картинками. Вы можете создать:

cap = cv2.VideoCapture('E:\\User\\Programming\\Python\\Work\\asd\\%d.jpg', cv2.CAP_FFMPEG)

или

cap = cv2.VideoCapture('E:\\User\\Programming\\Python\\Work\\asd\\%d.jpg', cv2.CAP_IMAGES)
0 голосов
/ 18 марта 2019

Альтернативным способом является присвоение имени файлу суффикса 0. Например: 001, 002, ... 100, 101, ... 250

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...