Python+OpenCv--采用不同编码器保存的视频比较
基本命令介绍:
1 cv2.imread(filename,property) 读入图像
- property:指定图像用哪种方式读取文件
- 2 cv2.IMREAD_COLOR:读入彩色图像,默认参数,Opencv 读取彩色图像为RBG模式,要与BMP格式的图像区分开
- 3 cv2.IMREAD_GRAYSCALE:读入灰度图像
- 4 cv2.imshow(窗口名,图像文件) :显示图像
- 5 cv2.waitKey() 键盘绑定函数
- 功能:函数等待特定的几毫秒,看是否由键盘输入
- 6 cv2.namedWindow(窗口名,属性) 创建一个窗口
- 属性:指定窗口大小模式
- 7 cv2.WINDOW_AUTOSIZE:根据图像大小自动创建大小
- 8 cv2.WINDOW_NORMAL:窗口大小可调整
- 9 cv2.destoryAllWindows(): 删除任何建立的窗口
更多介绍请参考下面实例代码:
实例代码:
#!/usr/bin/env python
# _*_ coding: UTF-8 _*_
# author:"Zhang Shuyu"
import cv2fourcc = cv2.VideoWriter_fourcc('X','V','I','D') # 使用XVID编码器,xvid为主流的通用视频编码器
camera = cv2.VideoCapture(0) # 参数0表示第一个摄像头
#fps = camera.get(cv2.CAP_PROP_FPS)# 获取视频帧率 todo:当视频流从摄像头采集时此命令无法使用
size = (int(camera.get(cv2.CAP_PROP_FRAME_WIDTH)),int(camera.get(cv2.CAP_PROP_FRAME_HEIGHT)))# 判断视频是否打开
if (camera.isOpened()):print('Open')
else:print('Fail to open!')# 测试用,查看视频size
size = (int(camera.get(cv2.CAP_PROP_FRAME_WIDTH)),int(camera.get(cv2.CAP_PROP_FRAME_HEIGHT)))
print ('size:'+repr(size))
out = cv2.VideoWriter('output_test_xvid-30.avi',fourcc,30,size) # 参数分别是:保存的文件名、编码器、帧率、视频宽高
count=0
while True:count+=1grabbed, frame_lwpCV = camera.read() # 逐帧采集视频流if not grabbed:breakcv2.imshow('lwpCVWindow', frame_lwpCV) # 显示采集到的视频流out.write(frame_lwpCV)key = cv2.waitKey(1) & 0xFFif key == ord('q') or count==300:#等待采集300帧图像数据或者点击键盘‘q’退出保存视频,count可以控制视频保存的时间break
out.release() #释放out,保存视频,否则程序会出现错误,保存的视频文件会提醒文件损坏
camera.release() #释放camera
cv2.destroyAllWindows()
在以上的代码中修改
fourcc = cv2.VideoWriter_fourcc('X','V','I','D') #'X','V','I','D'就是编码器的格式
可以使用PIM1、MP42等不同的编码格式
更多具体的视频流编码格式可以参考https://blog.csdn.net/qq_30622831/article/details/82082122
注意:有的编码器自己是不能使用的,不然保存后得到的视频会是0Kb或者无法打开出现异常,下图中的红色部分代表采用H264编码器得到的视频出现异常。原因是我的电脑上没有相应的linopenH264.dll文件。
最后通过对不同的编码格式(也就是编码器)得到的视频进行分析,可以得到下表:(不包括output_test_h264-30.avi)
视频 | 编码方式 | fps(帧率) | size | 比特率(kbps) | 数据类型 |
---|---|---|---|---|---|
output_test_free-30 | 无压缩类型(RGB24) | 10 | (640,480) | 833126 | uint8 |
output_test_mp42-30 | MP42 | 10 | (640,480) | 18432 | uint8 |
output_test_pim1-30 | PIM1 | 10 | (640,480) | 18432 | uint8 |
output_test_xvid-30 | XVID | 10 | (640,480) | 794 | uint8 |
这些视频的时长和帧率都是相同的,拍摄的景象都是相同的,但是不同的编码方式最后得到的视频相差很多。XVID保存的视频最小,无压缩格式保存的视频最大,但视频的清晰度也是无压缩的最好。用空间换取了视频的质量。在同等条件下,比特率对视频质量以及存储大小的影响最大。
使用无压缩类型编码方式的方法:
out = cv2.VideoWriter('output_test_xvid-30.avi',-1,30,size) # 参数分别是:保存的文件名、编码器、帧率、视频宽高
将指令中的编码器对应的参数改为“-1”即可,就会出现一个对话窗口,可以手动选择编码器
其他的一些视频流的编码详细介绍请参考
- https://blog.csdn.net/baidu_39511645/article/details/78442819
- http://www.360doc.com/content/15/0215/23/14534301_448873274.shtml
Python+OpenCv--采用不同编码器保存的视频比较相关推荐
- python opencv按照一定间隔保存视频帧
python opencv按照一定间隔保存视频帧 文章目录: 一.获取视频流的相关参数 二.设置间隔保存视频帧 想实现opencv读取视频帧,按照一定的时间间隔然后保存图片下来,因为所有的帧都保存下来 ...
- opencv把图片序列保存为视频
opencv把图片序列保存为视频 1,简介 opencv不仅把一段视频抽成一帧一帧的图片,还可以把连续的图片保存为一段视频,可以很方便的满足我们的需求,下面介绍如何把图片序列保存为视频. 2,open ...
- Python+OpenCV 图像处理系列(2)—— 视频捕获、播放和保存
1.视频捕获 为了获取视频,首先需要创建一个 VideoCapture 类对象.它的参数可以是设备的索引号,或者是一个视频文件.设备索引号就是在指定要使用的摄像头.一般的笔记本电脑都有内置摄像头.所以 ...
- python+opencv 实现图像人脸检测及视频中的人脸检测
执着于理想,纯粹于当下. 文章目录 一.数据和知识准备 1. 下载HAAR与LBP数据 2. opencv相关知识 二.python+opencv实现人脸检测 1. 图像单人脸检测 2. 图像多人脸检 ...
- Python OpenCV高速公路道路汽车车辆摄像头视频侦测检测识别统计数量
Python OpenCV高速公路道路汽车车辆侦测检测识别统计数量 如需安装运行环境或远程调试,可加QQ905733049由专业技术人员远程协助! 运行结果如下: 运行主要代码如下: import c ...
- python+opencv+PIL,在图片和视频中写入中文(汉字)
原博客地址:https://blog.csdn.net/wyx100/article/details/80412101 效果 代码 #!/usr/bin/env python # -*- coding ...
- 使用Python+OpenCV将连续图片生成avi视频
import cv2 import osim_dir = '...' # 图片存储路径 video_dir = '.../a.avi' # 视频存储路径及视频名 fps = 30 # 帧率一般选择20 ...
- python opencv 从Intel Realsense D435 视频流中读取并显示帧,按下空格将图像保存到指定文件夹,按下回车自动以一定时间间隔保存图像至指定文件夹
参考文章1:opencv之读入一幅图像,显示图像以及如何保存一副图像,基础操作 参考文章2:python-OpenCV2中 cv2.VideoCapture(),read(),waitKey()的使用 ...
- python opencv 保存摄像头视频,以及fourc编码的介绍
之所以写这篇博客,主要还是想介绍一下fourcc编码 1 读取摄像头 1.1 正常读取一个摄像头 1.读取摄像头 只读取摄像头 没有做其他操作 import cv2# 获取摄像头 0代表摄像头索引 c ...
最新文章
- 烂泥:nginx同时支持asp.net与php
- 15个最热门的GitHub库
- QT的QMaterial类的使用
- 03_ClickHouse数据格式,TabSeparated、TSKV、CSV格式、JSON格式、Parquet、ORC、其它数据格式(Native,Pretty,Values,Vertical等)
- Less Css 教程
- mysql强制禁止使用索引_MYSQL强制使用索引和禁止使用索引
- www.python123.org_python爬虫-requests
- 赛锐信息:优化SAP系统运行时的建议
- LDA通俗理解LDA主题模型
- Linux命令解释之mkfs.ext3
- 重磅!清华大学网上课程面向全国免费开放!无需登录、注册!在家上清华!...
- vsftp配置问题启示录
- YARN 工作流程详解
- [Objective-C]第一天
- 基于SSM+Shiro+Redis+Layui的后台管理系统
- 高精度定位系统精细测距定位
- glusterfs架构和原理
- 【开源】23个优秀的机器学习数据集,推荐!
- golang监控服务器性能,go 性能监控神器
- 桌面搜索项目正式启动
热门文章
- 100 个网络基础知识普及,看完成半个网络高手!(文末附PDF版本)
- 悲剧!中小企业惨痛的外训经历!
- text-shadow、box-shadow
- 【开源访谈】Kingshard 作者陈非访谈实录【项目简介】 Kingshard 是一个由Go开发高性能MySQL Proxy项目,kingshard在满足基本的读写分离的功能上,致力于简化MySQ
- mysql远程连接命令
- C++ vector构造函数
- [转]Nginx基本功能极速入门
- 北京慧点科技有限公司java开发实习生面试过程
- SAM解析:Sharpness-Aware Minimization for Efficiently Improving Generalization
- AutoCAD的命令脚本scr入门