如何根据图像名称上的编号顺序加载文件夹中的图像

问题描述 投票:0回答:3

我想制作一个程序,每秒根据帧序号逐个显示图像(图像来自一个视频,我已经将它改为图像.jpg,有292帧),但有一些错误使我的程序将它逐一显示但不按顺序显示,有时会跳跃(从第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)
python image opencv video
3个回答
0
投票

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


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)

然后迭代它并显示图像


0
投票

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)
© www.soinside.com 2019 - 2024. All rights reserved.