python调用opencv处理视频_Python调用OpenCV读写视频
最近因为经常对视频进行操作,所以记录下Python用opencv来读写视频的方法。
一、opencv读视频
python调用opencv来读视频比较简单,可以直接调用cv2.VideoCapture来读取视频和摄像头,基本上,常见的avi和mp4都能够正常读取。cv2.VideoCapture是通过传入数字来读取对应的摄像头,或者通过传入一个路径字符串来读取对应的视频文件。
最简单直接的读取视频的例子如下:
import cv2
cap = cv2.VideoCapture(0) #读取摄像头
#cap = cv2.VideoCapture("video.mp4") #读取视频文件
while(True):
ret, frame = cap.read()
if ret:
cv2.imshow("frame", frame)
if cv2.waitKey(1) & 0xFF == ord('q'):
break
else:
break
cap.release()
读取视频后,OpenCV提供了很多的视频相关的属性,我觉得常见且比较有用的几个属性见如下表格(完整表格见官网文档):
C/C++: CAP_PROP_POS_MSEC
Python: cv.CAP_PROP_POS_MSEC
Current position of the video file in milliseconds.当前视频帧在第几毫秒
C/C++: CAP_PROP_POS_FRAMES
Python: cv.CAP_PROP_POS_FRAMES
0-based index of the frame to be decoded/captured next.当前帧在视频中第几帧,从0开始
C/C++: CAP_PROP_POS_AVI_RATIO
Python: cv.CAP_PROP_POS_AVI_RATIO
Relative position of the video file: 0=start of the film, 1=end of the film.视频帧在视频中的相对位置
C/C++: CAP_PROP_FRAME_WIDTH
Python: cv.CAP_PROP_FRAME_WIDTH
Width of the frames in the video stream.视频帧宽度
C/C++: CAP_PROP_FRAME_HEIGHT
Python: cv.CAP_PROP_FRAME_HEIGHT
Height of the frames in the video stream.视频帧高度
C/C++: CAP_PROP_FPS
Python: cv.CAP_PROP_FPS
Frame rate.帧率
C/C++: CAP_PROP_FOURCC
Python: cv.CAP_PROP_FOURCC
4-character code of codec. see VideoWriter::fourcc .视频编码格式
C/C++: CAP_PROP_FRAME_COUNT
Python: cv.CAP_PROP_FRAME_COUNT
Number of frames in the video file.视频总帧数
有了上面的属性后,要获取对应的属性值,可以通过cv2.VideoCapture的get方法来获取,同样,可以通过set方法来写属性:
size = (int(cap.get(cv2.CAP_PROP_FRAME_WIDTH)), int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT)))
fps = cap.get(cv2.CAP_PROP_FPS)
二、 opencv写视频
opencv写视频调用的是cv2.VideoWriter,cv2.VideoWriter需要传入的四个主要的参数:保存的视频路径、编码格式、帧率、视频帧尺寸。
简单的写视频的例子在上面读视频的例子基础上,稍微添加一点代码,例子如下:
import cv2
cap = cv2.VideoCapture(0) #读取摄像头
#cap = cv2.VideoCapture("video.mp4") #读取视频文件
fps = 15
size = (int(cap.get(cv2.CAP_PROP_FRAME_WIDTH)), int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT)))
videoWriter = cv2.VideoWriter('video.mp4', cv2.VideoWriter_fourcc('M','P','E','G'), fps, size)
while(True):
ret, frame = cap.read()
if ret:
videoWriter.write(frame)
cv2.imshow("frame", frame)
if cv2.waitKey(1) & 0xFF == ord('q'):
break
else:
break
cap.release()
videoWriter.release()
这里主要说下编码格式,常见的视频编码格式可以在找fourcc.org上面查找。
opencv中比较常见的编码格式有"DIVX"、”MJPG"、"XVID"、"MPEG"等,这几个基本上opencv都是自带的可以直接读写的,保存的文件格式可以是.mp4也可以是.avi,但是OpenCV并不是自带的支持所有格式的,有时候在工程中可能会遇到需要其它编码格式,例如在web中要显示的话,常见的还是h264这种支持流的格式,而这一种opencv是不自带的,所以需要通过其它途径来实现。
要想使用OpenCV来保存h264视频的话,需要使用额外的库,在windows上是比较简单的,直接下载openh264库来使用即可,使用方法也比较简单,到openh264的github上下载相关的文件,比如我用的opencv-python为3.4.3.18,它使用的openh264版本是1.7,所以就可以下载http://ciscobinary.openh264.org/openh264-1.7.0-win64.dll.bz2的版本,如下:
下载之后直接解压,放到脚本所在的路径下,然后修改上面写视频的编码格式,格式可以是'h','2','6','4'或者'x','2','6','4',如下:
videoWriter = cv2.VideoWriter('video.mp4', cv2.VideoWriter_fourcc('h','2','6','4'), fps, size)
Linux稍微麻烦一点,本来以为可以参照Windows这种做法从上面的路径下载库文件来使用,但实际上运行的时候并没有用,会有问题,所以没解决,后面在github上找到其他的方法,稍微麻烦一点点,这里还没整理好,就先不加了。
东风夜放花千树。更吹落、星如雨。
宝马雕车香满路。
凤箫声动,玉壶光转,一夜鱼龙舞。
蛾儿雪柳黄金缕。笑语盈盈暗香去。
众里寻他千百度。
蓦然回首,那人却在,灯火阑珊处。
--辛弃疾 《青玉案·元夕》
python调用opencv处理视频_Python调用OpenCV读写视频相关推荐
- python调用webservice接口实例_python调用各种接口,webservice,c接口,com接口,socket协议方法...
python调用webservice接口(SOAP) (2)调用示例: 需要先安装suds库:pip install suds from suds.client import Client #如果需要 ...
- python 编辑视频_python也能玩视频剪辑!moviepy操作记录总结
moviepy库安装 今天咱们需要使用的第三方是moviepy,moviepy是用于视频编辑的Python模块,可用于基本操作(例如剪切,串联,标题插入),视频合成(也称为非线性编辑),视频处理或创建 ...
- python批量下载b站_python 批量下载bilibili视频的gui程序
运行效果: 完整代码: # !/usr/bin/python # -*- coding:utf-8 -*- # time: 2019/07/02--08:12 __author__ = 'Henry' ...
- python批量下载bilibili视频_python 批量下载bilibili视频的gui程序
运行效果: 完整代码: # !/usr/bin/python # -*- coding:utf-8 -*- # time: 2019/07/02--08:12 __author__ = 'Henry' ...
- python爬app无水印视频_Python爬虫:短视频平台无水印下载 (上)
导入: 虽然目前有些软件还没适配,但是,我发了 Blink 后有一写人留言或者私信找我要源码,不过我还在增加适配的软件,所以还没有时间写这篇博客,今天呢,就先把我目前适配了的代码拿出来,后续还会继续适 ...
- python打开摄像头获取图片_Python基于opencv调用摄像头获取个人图片的实现方法
接触图像领域的应该对于opencv都不会感到陌生,这个应该算是功能十分强劲的一个算法库了,当然了,使用起来也是很方便的,之前使用Windows7的时候出现多该库难以安装成功的情况,现在这个问题就不存在 ...
- python opencv 录制视频_Python利用opencv实现录制视频
import cv2 import threading #python 多线程操作库 class RecordingThread(threading.Thread): def __init__( ...
- python opencv 录制视频_python - 使用Opencv Python多线程录制视频 - 堆栈内存溢出
我认为您的工作方向正确,但是我无法使用您的代码保存文件. 这是一个使用多线程获取帧的视频流到视频小部件. 每个摄像机流都有两个线程: 线程#1-专用于仅读取摄像机流中的帧. 线程#2-专用于处理帧(显 ...
- python批量处理视频_Python调用ffmpeg开源视频处理库,批量处理视频
代码示例 # coding=utf-8 import os import subprocess import datetime import json, pprint import re, time ...
最新文章
- java文件锁定_如何使用java锁定文件(如果可能的话)
- 数据蒋堂 | 前半有序的大数据排序
- 【linux练习】基础作业一
- Yii2配置Nginx伪静态的方法
- 精算模型10 非参数模型0 精算数据、非参数建模的思路概述
- 文巾解题 1646. 获取生成数组中的最大值
- 打印网页时背景图片的问题
- 百练 03 复杂的整数划分问题
- 一台电脑两种jdk_jdk和jre有什么区别?
- win11定时关机命令
- python通信系统仿真_详解MATLAB/Simulink通信系统建模与仿真 PDF 高清版
- 冲压模板自动标注LISP_自动标注.LSP
- 带通滤波器中心频率计算公式中R是哪个值_LCC-HVDC 交流滤波器选择策略
- 推荐一款专家级网站流量分析软件-逆火(Nihuo)
- Android朋友圈怎么换行,微信朋友圈个性签名怎么换行
- 关于一些Ubuntu网络问题的解决办法
- pwm一个时间单位_详解PWM原理、频率与占空比
- 监控系统体系1-数据流监控系统
- 专题7:动态规划 记忆化搜索
- 华为海思人脸识别方案 海思 3516嵌入式 Linux系统人脸识别开发模组套件