opencv python 多张jpg图片转成avi视频

Python+OpenCV合成微表情图片为视频
在微表情识别研究中,山东大学的MMEW微表情数据集以图片形式提供数据,采集帧率90帧,连续查看图片帧率仅十几帧,不利于面部动作分析。将图片合成视频,用视频软件0.5倍速播放效果较好。给出了使用Python 3.7和OpenCV 4.6.0将MMEW数据集中微表情jpg图片合成avi视频的代码。

在进行微表情识别研究时,使用到了山东大学发布的MMEW微表情数据集,这个数据集提供的数据是图片的形式。数据集在采集的时候使用的帧率是90帧,而使用图片进行连续查看的时候,帧率大概能达到10几帧,看到的面部表情的运动特别慢,不容易进行微表情的面部动作分析。

把图片合成视频后,可以通过视频软件的倍速播放功能的0.5倍速可以得到比较好的查看效果。

环境:python 3.7

opencv 4.6.0

下面是图片合成视频的代码:

# coding:utf-8
import numpy as np
import cv2
import time
import os

dir_path = r'E:\datasets\micro-expression\MMEW\Micro_Expression\anger\S17-07-001'

fps = 90.0  # 帧率
fourcc = cv2.VideoWriter_fourcc(*'XVID')  # 视频编码器
size = (231, 231)  # 视频分辨率,与原始图片保持一致,或者将图片皆resize到訪分辨率
output_full_path  = os.path.join(os.path.dirname(dir_path), os.path.basename(dir_path) + '.avi')
out = cv2.VideoWriter(output_full_path, fourcc, fps, size)  # 定义输出文件及其它参数

files = os.listdir(dir_path)
print(files)

for idx in range(1, len(files)+1):

    image_file = os.path.join(dir_path, str(idx) + '.jpg')
    frame = cv2.imread(image_file)
    out.write(frame)
    cv2.imshow('frame', frame)
    cv2.waitKey(100)
    print(image_file)

    if cv2.waitKey(25) & 0xFF == ord('q'):
        break

out.release()
cv2.destroyAllWindows()

批量合成MMEW数据集中微表情部分jpg图片为avi视频:

MMEW_jpg2avi.py

# coding:utf-8
import numpy as np
import cv2
import time
import os

mmew_dir = r'E:\datasets\micro-expression\MMEW'
mmew_mirco_e_dir = os.path.join(mmew_dir, 'Micro_Expression')
fps = 90.0  # 帧率
fourcc = cv2.VideoWriter_fourcc(*'XVID')  # 视频编码器
size = (231, 231)  # 视频分辨率,与原始图片保持一致,或者将图片皆resize到訪分辨率

emotions_dir = os.listdir(mmew_mirco_e_dir)
print(emotions_dir)
for emotion_dir in emotions_dir:
    print(os.path.join(mmew_mirco_e_dir, emotion_dir))
    emotion_dir_path = os.path.join(mmew_mirco_e_dir, emotion_dir)
    emotion_dir_subs = os.listdir(emotion_dir_path)
    for emotion_dir_sub in emotion_dir_subs:
        dir_path = os.path.join(emotion_dir_path, emotion_dir_sub)
        print(dir_path)

        if os.path.isdir(dir_path):
            output_full_path = os.path.join(os.path.dirname(dir_path), os.path.basename(dir_path) + '.avi')
            out = cv2.VideoWriter(output_full_path, fourcc, fps, size)  # 定义输出文件及其它参数
            files = os.listdir(dir_path)
            print(files)

            for idx in range(1, len(files)+1):

                image_file = os.path.join(dir_path, str(idx) + '.jpg')
                frame = cv2.imread(image_file)
                out.write(frame)
                cv2.imshow(emotion_dir, frame)
                cv2.waitKey(1)
                # print(image_file)

                if cv2.waitKey(25) & 0xFF == ord('q'):
                    break

            out.release()

cv2.destroyAllWindows()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值