首页 > 解决方案 > 如何根据图像名称上的数字顺序从文件夹加载图像

问题描述

我想制作一个程序,根据顺序的帧号每秒显示 1 x 1的图像(图像来自视频,我已经将其更改为 292 帧的图像 .jpg),但是有一些错误使我的程序逐个显示但按顺序显示,有时会跳转(从第 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)

标签: pythonimageopencvvideo

解决方案


我想你必须 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)

然后遍历它并显示图像


推荐阅读