专栏首页Petrichor的专栏opencv: 合成视频

opencv: 合成视频

Template

# 用list记录图片地址
src_paths = [os.path.join(SRC_FOLDER, path) for path in os.listdir(SRC_FOLDER) if path.endswith(".png")]

# 一定要记得 sort() !
src_paths.sort()

# 配置cv2.VideoWriter参数
sample_img = cv2.imread(src_paths[0])
h, w, _ = sample_img.shape
out = cv2.VideoWriter(DST_FOLDER+video_name, -1, fps, (w, h))

# 循环write
pbar = tqdm(src_paths)
for i, src_path in enumerate(pbar):
    frame = cv2.imread(src_path)
    out.write(frame)
    # 实时显示处理过的帧图片
    cv2.imshow('frame', output)
    cv2.waitKey(1)
    pbar.set_description("  COMPLETE ")

# 释放cv2.VideoWriter
out.release()
# 关闭帧图片展示窗口
cv2.destroyAllWindows()

Test Code

import shutil
import cv2
from tqdm import tqdm


SRC_FOLDER = "./o_file/after_op_1"
DST_FOLDER = "./o_file/after_op_3"
ENDWITH = ".MOV"


def make_video(fps, video_name):

    src_paths = [os.path.join(SRC_FOLDER, path) for path in os.listdir(SRC_FOLDER) if path.endswith(".png")]
    src_paths.sort()

    sample_img = cv2.imread(src_paths[0])
    h, w, _ = sample_img.shape
    out = cv2.VideoWriter(DST_FOLDER+video_name, -1, fps, (w, h))

    pbar = tqdm(src_paths)
    for i, src_path in enumerate(pbar):
        frame = cv2.imread(src_path)
        # 实时显示处理过的帧图片
        cv2.imshow('frame', output)
        cv2.waitKey(1)
        pbar.set_description("  COMPLETE ")
    out.release()
    # 关闭帧图片展示窗口
    cv2.destroyAllWindows()



if __name__ == "__main__":

    try:
        shutil.rmtree(DST_FOLDER)
    except OSError:
        pass
    import os
    os.makedirs(DST_FOLDER)

    fps_lst = [30]
    fourcc_types = [-1]

    for fps in fps_lst:
        video_name = "/output_" + "_" + str(fps) + ENDWITH
        print("\n Make video {} in fps:{}".format(video_name, fps))
        make_video(fps, video_name)

[1] OpenCV: Getting Started with Videos

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • opencv: cv2.flip 图像翻转 进行 数据增强

    Flipped Horizontally & Vertically 水平垂直翻转:

    JNingWei
  • opencv: 形态学 转换(图示+源码)

    OpenCV中的形态学转换操作有七种:腐蚀,膨胀,开运算,闭运算,形态学梯度,礼帽,黑帽。

    JNingWei
  • 论文阅读: DenseNet

    将原本ResNet的 “串行式一对一的identity mapping” 变成了 “一对多的identity mapping”:

    JNingWei
  • 这四个问题场景你会排查原因吗?看看高手是如何使用 Arthas 快速定位原因的!

    俗话说的好 “问题排查不用愁,Arthas 来帮您忙。” 今天就来说说这个让妈妈再也不用担心我排查问题的 Java 诊断神器:Arthas!

    程序猿DD
  • 性能测试如何定位瓶颈?偶发超时?看高手如何快速排查问题

    俗话说的好 “问题排查不用愁,Arthas 来帮您忙。” 今天就来说说这个让妈妈再也不用担心我排查问题的 Java 诊断神器——Arthas!

    用户1516716
  • Html5 学习利器 Web Standards Update for Microsoft Visual Studio 2010 SP1

    HTML5然还在草案阶段,不过 HTML5 这名词实在越来越热,互联网上很多产品都深度应用了HTML5,比如WebQQ,可以看看http://www.infoq...

    张善友
  • C语言union关键字

    夏时
  • opencv报错

    错误一:error: (-215) !empty() in function cv::CascadeClassifier::detectMultiScale

    用户7625592
  • 文本相似度——编辑距离

    莫斯
  • Java 8:一文掌握 Lambda 表达式

    能够使用 Lambda 表达式的一个重要依据是必须有相应的函数接口。所谓函数接口,是指内部有且仅有一个抽象方法的接口。

    淡定的蜗牛

扫码关注云+社区

领取腾讯云代金券