文章目录

  • 问题描述
  • 代码
  • 封装
  • 参考文献

问题描述

Python OpenCV 保存mp4视频

本文代码、图片及模型下载地址

代码

0为摄像头,换为路径则读取视频文件

import cv2cap = cv2.VideoCapture(0)  # 打开摄像头fourcc = cv2.VideoWriter_fourcc(*'MP4V')  # 视频编解码器
fps = cap.get(cv2.CAP_PROP_FPS)  # 帧数
width, height = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH)), int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT))  # 宽高
out = cv2.VideoWriter('result.mp4', fourcc, fps, (width, height))  # 写入视频while cap.isOpened():ret, frame = cap.read()if ret == True:out.write(frame)  # 写入帧cv2.imshow('frame', frame)if cv2.waitKey(1) & 0xFF == ord('q'):  # q退出breakelse:breakcap.release()
out.release()
cv2.destroyAllWindows()

推荐阅读

  1. 视频编解码器FOURCC

封装

加载处理图像处理函数直接保存视频

process_video.py

import cv2
from timeit import default_timer as timerdef process_video(filename=0, func=None, output='result.mp4', verbose=0):"""处理视频:param filename: 视频源,默认为摄像头:param func: 处理每一帧的函数名:param output: 保存的文件名:param verbose: 可视化,0不可视化,1显示处理后的结果,2显示对比结果"""cap = cv2.VideoCapture(filename)  # 打开摄像头fourcc = cv2.VideoWriter_fourcc(*'MP4V')  # 视频编解码器fps = cap.get(cv2.CAP_PROP_FPS)  # 帧数width, height = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH)), int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT))  # 宽高out = cv2.VideoWriter(output, fourcc, fps, (width, height))  # 写入视频if verbose > 0 or filename == 0:print('英文下输入q停止')count = cap.get(cv2.CAP_PROP_FRAME_COUNT)  # 总帧数accum_time = 0  # 累计时间curr_fps = 0  # 当前帧数prev_time = timer()  # 上一段的时间while cap.isOpened():if count > 0:current = cap.get(cv2.CAP_PROP_POS_FRAMES)  # 当前第几帧curr_time = timer()  # 当前时间exec_time = curr_time - prev_time  # 处理时间prev_time = curr_time  # 上一段的时间设为当前时间accum_time = accum_time + exec_time  # 累计时间curr_fps = curr_fps + 1if accum_time >= 1:accum_time = accum_time - 1print('进度:{:.2f}%\tFPS:{}'.format(current / count * 100, curr_fps))curr_fps = 0  # 重置帧数ret, frame = cap.read()if ret == True:result = func(frame) if func else frameout.write(result)  # 写入帧if verbose > 0 or filename == 0:cv2.imshow('after', result)if verbose == 2:cv2.imshow('before', frame)if cv2.waitKey(1) & 0xFF == ord('q'):  # q退出breakelse:breakcap.release()out.release()cv2.destroyAllWindows()if __name__ == '__main__':process_video()

main.py

import cv2
import numpy as npfrom process_video import process_videodef flip(frame):"""图像翻转"""return cv2.flip(frame, 0)net = cv2.dnn.readNetFromTensorflow('model/opencv_face_detector_uint8.pb','model/opencv_face_detector.pbtxt'
)  # TensorFlow模型def face_detect(frame):"""人脸检测"""frame = frame.copy()height, width, channel = frame.shape  # 高、宽、通道数blob = cv2.dnn.blobFromImage(cv2.resize(frame, (300, 300)), 1.0, (300, 300),(104.0, 177.0, 123.0))  # 调整大小并降低光照的影响net.setInput(blob)  # 设置输入detections = net.forward()  # 检测结果faces = detections[0, 0]  # 人脸结果for face in faces:confidence = face[2]  # 置信度if confidence > 0.5:  # 置信度阈值设为0.5box = face[3:7] * np.array([width, height, width, height])  # 人脸矩形框坐标pt1 = int(box[0]), int(box[1])  # 左上角坐标pt2 = int(box[2]), int(box[3])  # 右下角坐标cv2.rectangle(frame, pt1, pt2, (0, 255, 0), thickness=2)  # 画出人脸矩形框text = '{:.2f}%'.format(confidence * 100)  # 置信度文本startX, startY = pt1y = startY - 10 if startY - 10 > 10 else startY + 10org = (startX, y)  # 文本的左下角坐标cv2.putText(frame, text, org, cv2.FONT_HERSHEY_SIMPLEX, 0.5, (0, 255, 0), thickness=2)  # 画出置信度return frameif __name__ == '__main__':process_video('test.mp4', func=face_detect, verbose=2)

效果

verbose=1

verbose=2

参考文献

  1. OpenCV-Python 官方文档
  2. 视频编解码器FOURCC

Python OpenCV 保存mp4视频相关推荐

  1. python opencv 保存摄像头视频,以及fourc编码的介绍

    之所以写这篇博客,主要还是想介绍一下fourcc编码 1 读取摄像头 1.1 正常读取一个摄像头 1.读取摄像头 只读取摄像头 没有做其他操作 import cv2# 获取摄像头 0代表摄像头索引 c ...

  2. python opencv读mp4视频

    #获得视频的格式 videoCapture = cv2.VideoCapture('/home/lw/3661.mp4')#获得码率及尺寸 fps = videoCapture.get(cv2.CAP ...

  3. Python opencv保存视频打不开

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

  4. 使用opencv从mp4视频中抽帧并保存

    使用oepncv有两种方法,一种是使用cvGrabFrame()+cvRetrieveFrame(),另一种是使用使用cvQueryFrame(). http://blog.csdn.net/augu ...

  5. [转载] 使用Python+OpenCV实现在视频中某对象后添加图像

    参考链接: Python Opencv 基础3 : resize 调整图像大小 概述 在运动物体后面添加图像是一个典型的计算机视觉项目了解如何使用传统的计算机视觉技术在视频中添加logo 介绍 我的一 ...

  6. python opencv 批量将视频转化为图片

    单个的视频转换图片参看: python opencv 把视频转为图片 对于多个视频,采用多线程处理方法 video_path为待转换视频的路径,pic_path为输出图像的路径,输出的图像统一保存在p ...

  7. python+opencv调用摄像头视频图像处理

    在做深度学习的时候,难免会用到摄像头采集图像.在这个就会用到python调用摄像头+opencv图像处理.视频图像的处理和单幅图片处理是一样的,视频就是很多单幅图像连续播放.每秒播放(采集)的图片数量 ...

  8. 使用Python+OpenCV实现在视频中某对象后添加图像

    概述 在运动物体后面添加图像是一个典型的计算机视觉项目 了解如何使用传统的计算机视觉技术在视频中添加logo 介绍 我的一位同事向我提出了一个挑战--建立一个计算机视觉模型,可以在视频中插入任何图像, ...

  9. python opencv 播放网络视频_opencv 网络视频流

    带你读<OpenCV 4计算机视觉项目实战 (原书第2版)>之一:OpenCV入门 智能系统与技术丛书点击查看第二章点击查看第三章OpenCV 4计算机视觉项目实战(原书第2版)Learn ...

  10. Python 下载网络mp4视频资源

    最近着迷化学, 特别是古代的冶炼技术,感叹古人的聪明. 春秋时期的炼铁方法是块炼铁,即在较低的冶炼温度下,将铁矿石固态还原获得海绵铁,再经锻打成的铁块.冶炼块炼铁,一般采用地炉.平地筑炉和竖炉3种.铁 ...

最新文章

  1. php扩展-ioncube组件的安装方法_Windows系统PHPStudy Web环境安装ionCube扩展软件
  2. [待]-optee的native_intr_handler中断处理流程
  3. OpenGL编程指南4:双缓冲实现运行
  4. ASP.NET Core 源码学习之 Logging[2]:Configure
  5. SSIS 包部署错误 0xC0010014
  6. Android官方开发文档Training系列课程中文版:支持不同的设备之支持不同的屏幕
  7. LeetCode(#118)————杨辉三角形
  8. POJ2586(贪心)
  9. SELECT TOP 1 比不加TOP 1 慢的原因分析以及SELECT TOP 1语句执行计划预估原理
  10. 12月江苏计算机考试报名入口,江苏2019年12月计算机等级报名时间丨报名系统
  11. php怎么自己写框架,PHP学习笔记,自己动手写个MVC的框架
  12. docker搭建zabbix
  13. python软件下载3版本-Python3.9下载
  14. 选offer的5个维度
  15. 网站 云服务器ecshop,ecs云服务器搭建ecshop
  16. 原生JS实现弹幕效果
  17. 精准医学: 应用脑脊液游离DNA全基因组甲基化测序筛选小儿髓母细 胞瘤早期诊断与预后监测的可靠生物标志物|液体活检专题
  18. SpringCloud Day12---SpringCloud Alibaba Sentinel 服务熔断与限流
  19. centos7免密登录
  20. Teechart图表教程:Teechart的安装

热门文章

  1. 【spring mvc】annotation-driven 配置详解
  2. html自动验证邮件地址格式,JS进行E-mail地址格式验证代码
  3. opencv学习(四十四)之图像角点检测Harris
  4. html表格某一行背景颜色设置,HTML表格行背景颜色与浮动属性不一样
  5. 阿里云轻量级应用服务器设置外网访问端口
  6. 0x0f的java写法_0x0f(0x0f转化十进制)
  7. 计算机软件如何永久删除,【电脑软件教程篇】如何永久彻底清除电脑使用痕迹...
  8. c++小游戏:笨鸟先飞(Flappy bird hhh)
  9. 手把手教你用ArcGIS做张降雨量分布专题图
  10. 使用excel分类汇总数据生成饼图