【问题标题】:Issue in reading frames sequence wise from folder in Python从 Python 文件夹中按顺序读取帧的问题
【发布时间】:2020-12-10 16:16:00
【问题描述】:

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

谢谢

【问题讨论】:

  • 您可以使用它们被创建的时间。 filenames = sorted(filenames, key=os.path.getctime)filenames.sort(key=os.path.getctime),如果它们的生成顺序正确。
  • @Thymen,感谢您的精彩建议。请您发布您的答案,以便其他人受益以获得更好的知名度吗?
  • 文件通常按字母顺序从磁盘读取。这意味着在 xxx1.jpg 之前读取 xxx10.jpg。因此,您应该在文件名中添加前导零。然后按字母顺序阅读它们将加载 xxx01、xxx02、... xxx10... 直到 xxx99。如果超过 99,请使用更多前导零

标签: python python-3.x opencv glob


【解决方案1】:

试试这个

files_list = os.listdir('/content/test1') # use your folderpath here 
files_list.sort(key=lambda f: int(re.sub('\D', '', f))) 

例如,

files_list = ['frame0.jpg','frame1.jpg','frame10.jpg','frame100.jpg',
              'frame101.jpg','frame2.jpg','frame20.jpg','frame3.jpg']
files_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']

【讨论】:

    【解决方案2】:

    其他方式。试试:

    filenames = sorted(filenames, key=lambda x: int("".join([i for i in x if i.isdigit()])))
    

    Here 就是一个例子。

    【讨论】:

      【解决方案3】:

      当文件按原始顺序创建时,您可以使用它们的创建时间进行排序。

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-09-25
        • 2019-10-05
        • 2020-08-04
        • 1970-01-01
        • 1970-01-01
        • 2012-08-10
        相关资源
        最近更新 更多