Jester动态手势数据集图片转换为视频

1. 动机

最近在做“动态手势识别”,下载了一个公开数据集。这个数据集全部是‘.jpg’的图片,需要把它转换成视频。

从网上找了一段代码:Python+Opencv实现把图片转为视频

import os
import cv2
import numpy as np


path = './data/'
filelist = os.listdir(path)

fps = 24  # 视频每秒24帧
size = (176, 100)  # 需要转为视频的图片的尺寸

video = cv2.VideoWriter("VideoTest1.avi", 
					    cv2.VideoWriter_fourcc('I', '4', '2', '0'), 
					    fps, 
					    size)
					    
# 视频保存在当前目录下
for item in filelist:
    if item.endswith('.jpg'):
        # 找到路径中所有后缀名为.png的文件,可以更换为.jpg或其它
        item = path + item
        img = cv2.imread(item)
        video.write(img)

video.release()
cv2.destroyAllWindows()

2. 发现问题

但是发现生成的视频是乱序的。此时 print(os.listdir(path)),输出结果如下:

3. 解决问题

根据 关于os.listdir函数“乱序”的解决方法 的代码,对于纯数字排序的图片,可以进行 sorted 使其顺序正确。

import os

img_sort = os.listdir('D:\Images\set12')
# get_key是sotred函数用来比较的元素,该处用lambda表达式替代函数。
get_key = lambda i : int(i.split('.')[0])
img_new_sort = sorted(img_sort, key=get_key)
print(img_sort, '\n', img_new_sort)

我们根据这两位老哥的讲解,得到:

import os
import cv2

path = './data/'
filelist = os.listdir(path)
filelist = sorted(filelist)  # 使得list有序

fps = 24  # 视频每秒24帧
size = (176, 100)  # 需要转为视频的图片的尺寸
# 可以使用cv2.resize()进行修改

video = cv2.VideoWriter("VideoTest1.avi", cv2.VideoWriter_fourcc('I', '4', '2', '0'), fps, size)
# 视频保存在当前目录下

for item in filelist:
    if item.endswith('.jpg'):
        # 找到路径中所有后缀名为.png的文件,可以更换为.jpg或其它
        item = path + item
        img = cv2.imread(item)
        video.write(img)

video.release()
cv2.destroyAllWindows()

这个时候得到的视频顺序是正确的,时长也是正常的了。

  • 3
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值