转载自:https://blog.csdn.net/DumpDoctorWang/article/details/92399157
请读原文
其实OpenCV已经提供了写视频的接口,但是编码和文件后缀的对应真是让人头疼,动不动就不支持。经过尝试,总结出目前两种可以正常写入视频的对应关系:

MJPG --> .avi
mp4v -->.mp4

一、编码MJPG、后缀.avi

MJPG是大写!!!

# coding=utf-8
from __future__ import absolute_import, division, print_function
import cv2
import warnings
import numpy as np
warnings.simplefilter("always")class VideoWriter:def __init__(self, name, width, height, fps=25):# type: (str, int, int, int) -> Noneif not name.endswith('.avi'):  # 保证文件名的后缀是.aviname += '.avi'warnings.warn('video name should ends with ".avi"')self.__name = name          # 文件名self.__height = height      # 高self.__width = width        # 宽fourcc = cv2.VideoWriter_fourcc(*'MJPG')  # 如果是avi视频,编码需要为MJPGself.__writer = cv2.VideoWriter(name, fourcc, fps, (width, height))def write(self, frame):if frame.dtype != np.uint8:  # 检查frame的类型raise ValueError('frame.dtype should be np.uint8')# 检查frame的大小row, col, _ = frame.shapeif row != self.__height or col != self.__width:warnings.warn('长和宽不等于创建视频写入时的设置,此frame不会被写入视频')returnself.__writer.write(frame)def close(self):self.__writer.release()def main():width = 512height = 256vw = VideoWriter('test.avi', width, height)for i in range(25*50):# 随机生成一幅图像frame = np.random.randint(0, 255, (height, width, 3), dtype=np.uint8)# 写入图像vw.write(frame)# 关闭vw.close()if __name__ == '__main__':main()

二、编码mp4v、后缀.mp4

mp4v是小写!!!

# coding=utf-8
from __future__ import absolute_import, division, print_function
import cv2
import warnings
import numpy as np
warnings.simplefilter("always")class VideoWriter:def __init__(self, name, width, height, fps=25):# type: (str, int, int, int) -> Noneif not name.endswith('.mp4'):  # 保证文件名的后缀是.mp4name += '.mp4'warnings.warn('video name should ends with ".mp4"')self.__name = name          # 文件名self.__height = height      # 高self.__width = width        # 宽fourcc = cv2.VideoWriter_fourcc(*'mp4v')  # 如果是mp4视频,编码需要为mp4vself.__writer = cv2.VideoWriter(name, fourcc, fps, (width, height))def write(self, frame):if frame.dtype != np.uint8:  # 检查frame的类型raise ValueError('frame.dtype should be np.uint8')# 检查frame的大小row, col, _ = frame.shapeif row != self.__height or col != self.__width:warnings.warn('长和宽不等于创建视频写入时的设置,此frame不会被写入视频')returnself.__writer.write(frame)def close(self):self.__writer.release()def main():width = 512height = 256vw = VideoWriter('test.mp4', width, height)for i in range(25*50):# 随机生成一幅图像frame = np.random.randint(0, 255, (height, width, 3), dtype=np.uint8)# 写入图像vw.write(frame)# 关闭vw.close()if __name__ == '__main__':main()

三、视频写入失败的原因

不支持对应的编码和后缀。目前我知道支持的是:

  • mp4v–>.mp4
  • MJPG–>.avi
    frame的值类型不是uint8。
    frame的高或者宽和新建cv2.VideoWriter设置的高或宽不对应。

Python OpenCV 写入视频相关推荐

  1. 解决Python OpenCV 读取视频并抽帧出现error while decoding的问题

    解决Python OpenCV 读取视频抽帧出现error while decoding的问题 1. 问题 2. 解决 3. 源代码 参考 1. 问题 读取H264视频,抽帧视频并保存,报错如下: [ ...

  2. 使用Python,OpenCV在视频中进行实时条形码检测

    使用Python,OpenCV在视频中进行实时条形码检测 1. 步骤 2. 适用场景及优化 3. 总结 4. 源码 参考 上一篇博客介绍了如何检测和查找图像中的条形码.这篇博客将进行一些优化以检测实时 ...

  3. python图片转视频加特效_使用Python opencv实现视频与图片的相互转换

    因为最近要经常转换数据集进行实验,因此记录一下. 1.视频转图片 即为将视频解析为一帧一帧的图片: import cv2 vc=cv2.VideoCapture("/home/hqd/Pyc ...

  4. Python opencv保存视频打不开

    超链接:深度学习工作常用方法汇总,矩阵维度变化.图片.视频等操作,包含(torch.numpy.opencv等) 视频写入失败或视频打不开原因: frame的高或者宽和新建cv2.VideoWrite ...

  5. python opencv 图片/视频 拼接

    python opencv 图片/视频 拼接 # coding: utf-8 # 像写诗一样写代码 import numpy as np import cv2img_A_path = "C: ...

  6. python opencv写视频——cv2.VideoWriter()

    python opencv写视频--cv2.VideoWriter() 函数原型 cv2.VideoWriter() VideoWriter(filename, fourcc, fps, frameS ...

  7. python opencv PIL 视频分割成图片 图片合成为视频 修改图片大小(抗锯齿)

    Python代码将原有的视频分割成图片,我的例子是一帧一帧的分割 用python+opencv完成视频的分割 import cv2 #导入opencv模块 print(2) #测试是否运行 vc=cv ...

  8. python opencv 录制视频_Python利用opencv实现录制视频

    import cv2 import threading    #python 多线程操作库 class RecordingThread(threading.Thread): def __init__( ...

  9. python opencv录制视频_Python-OpenCV 处理视频(一)(二): 输入输出 视频处理

    视频的处理和图片的处理类似,只不过视频处理需要连续处理一系列图片. 一般有两种视频源,一种是直接从硬盘加载视频,另一种是获取摄像头视频. 0x00. 本地读取视频 核心函数: cv.CaptureFr ...

最新文章

  1. 10个重要问题概览Transformer全部内容
  2. 【完整代码】Scala akka入门示例
  3. Oracle RAC 启动与关闭 (rac 命令示例)
  4. mysql从dos界面_从DOS界面进入MYSQL数据库
  5. 前端学PHP之文件操作(认真读读)
  6. 蓝桥杯第七届省赛JAVA真题----剪邮票
  7. 组件用.vue还是.js_如何使用Vue.js 2.0构建灵活的图像上传器组件
  8. 用css实现透明度的方法
  9. 微信小程序获取当前地址以及选择地址详解 地点标记
  10. R语言建立VAR模型分析联合内生变量的动态关系
  11. 基于MFFMB的电商评论文本分类研究
  12. 2022年物理学诺奖获主,他们证明爱因斯坦错了
  13. 数控编程也是c语言吗,学数控编程需要使用个人电脑吗
  14. 引才!博士60万、硕士35万、本科28万,沿海城市
  15. 乐鑫开发工具链之国内镜像gitee飞起
  16. 如何从 “用户评论”中挖掘业务价值
  17. 人脸技术-人脸数据库汇总
  18. 第8章 图形化显示地震危机数据(海地)
  19. 汽车消费陷阱多,盛世昊通教你擦亮双眼精挑细选
  20. JavaScript简体繁体中文转换

热门文章

  1. Maven delopy源码
  2. 近世代数:同构、同态
  3. If-else与三目运算符的区别
  4. 百度搜索结果的URL参数 搜索历史记录(rsv_sug)
  5. 百度搜索结果页面的参数 搜索历史记录(rsv_sug)
  6. 钛灵科技入驻中国视界,共筑人工智能视觉产业新高地
  7. Initialization of variable was never used; consider replacing with assignment to ‘_’ or removing it
  8. jQuery 一次定时器_记一次腾讯微信面试
  9. iReport与JasperReport中如何支持文支持显示
  10. paypal简单分享