Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/287.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Python中按顺序从文件夹中读取帧时出现问题_Python_Python 3.x_Opencv_Glob - Fatal编程技术网

在Python中按顺序从文件夹中读取帧时出现问题

在Python中按顺序从文件夹中读取帧时出现问题,python,python-3.x,opencv,glob,Python,Python 3.x,Opencv,Glob,我从文件夹中读取了以下代码帧。我的视频帧以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

我从文件夹中读取了以下代码帧。我的视频帧以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
谢谢你试试这个

files_list=os.listdir('/content/test1')#在这里使用您的folderpath
文件\u list.sort(key=lambda f:int(re.sub('\D','',f)))
比如说,

files\u list=['frame0.jpg'、'frame1.jpg'、'frame10.jpg'、'frame100.jpg',
'frame101.jpg'、'frame2.jpg'、'frame20.jpg'、'frame3.jpg']
文件\u 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']
试试这个

files_list=os.listdir('/content/test1')#在这里使用您的folderpath
文件\u list.sort(key=lambda f:int(re.sub('\D','',f)))
比如说,

files\u list=['frame0.jpg'、'frame1.jpg'、'frame10.jpg'、'frame100.jpg',
'frame101.jpg'、'frame2.jpg'、'frame20.jpg'、'frame3.jpg']
文件\u 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()])))
这是一个例子。

另一种方式。尝试:

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.sort(key=os.path.getctime)


您可以使用创建它们的时间
filenames=sorted(filenames,key=os.path.getctime)
filenames.sort(key=os.path.getctime)
,如果它们是按正确的顺序生成的。@Thymen,谢谢你的建议。请发布您的答案,以便其他人能够更好地了解您的答案。文件通常按字母顺序从磁盘读取。这意味着xxx10.jpg在xxx1.jpg之前读取。因此,您应该在文件名中添加前导零。然后按字母顺序读取它们将加载xxx01、xxx02。。。xxx10。。。高达xxx99。如果前导零的数量超过99个,请使用更多前导零。您可以使用创建它们的时间
filenames=sorted(filenames,key=os.path.getctime)
filenames.sort(key=os.path.getctime)
,如果它们是按正确的顺序生成的。@Thymen,谢谢你的建议。请发布您的答案,以便其他人能够更好地了解您的答案。文件通常按字母顺序从磁盘读取。这意味着xxx10.jpg在xxx1.jpg之前读取。因此,您应该在文件名中添加前导零。然后按字母顺序读取它们将加载xxx01、xxx02。。。xxx10。。。高达xxx99。如果有超过99个前导零,请使用更多前导零