如何根据图像名称上的编号依次从文件夹中加载图像

时间:2019-03-18 06:46:39

标签: python image opencv video

我想制作一个程序,根据顺序中的帧数每秒显示1张图像(图像来自视频,我已经将其更改为292帧的图像.jpg了。 ),但是有一些错误使我的程序按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 :(得分:0)

另一种方法是使用后缀0命名文件。例如:001、002,... 100、101,... 250

答案 1 :(得分:0)

我想你必须按照以下步骤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)

然后遍历它并显示图像

答案 2 :(得分:0)

FFmpeg可以播放带有图片的文件夹。 您可以创建:

decimal(65,30)

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