Python OpenCV获取视频的方法


Posted in Python onFebruary 28, 2018

之前有文章,使用Android平台的OpenCV接入了视频,控制的目标是手机的摄像头,这是OpenCV的好处,使用OpenCV可以使用跨平台的接口实现相同的功能,减少了平台间移植的困难。正如本文后面,将使用类似的接口,从笔记本的摄像头获取视频,所以,尝试本文代码需要有一台有摄像头的电脑。

不过,需要说明的的是,OpenCV的强项在于图像相关的处理,而不是视频的编解码,所以,不要使用OpenCV做多余的事情,我们使用OpenCV接入视频或者图片的目的,是为了对视频或图片进行处理。

关于Python下配置OpenCV的过程,由于不能直接使用pip进行安装,过程相对复杂一些,不过,网上文章很多,多查阅一些资料,需要注意的是,要清楚自己的Python的版本,Python2和Python3的配置方法不同。

本节实现的是使用内建摄像头捕获视频,并显示视频的每一帧以实现视频的播放。

  1. 创建摄像头对象,指向文件
  2. 逐帧显示实现视频播放

下面进入我们的主题,配置好OpenCV以后,创建一个video_capture.py文件,内容如下:

#!/usr/bin/env python3 
import cv2 
 
#创建显示视频的窗口 
cv2.namedWindow('Video') 
 
#打开摄像头 
video_capture = cv2.VideoCapture(0) 
 
#创建视频写入对象 
video_writer = cv2.VideoWriter('test.avi', 
                cv2.VideoWriter_fourcc('M', 'J', 'P', 'G'), 
                video_capture.get(cv2.CAP_PROP_FPS), 
                (int(video_capture.get(cv2.CAP_PROP_FRAME_WIDTH)), 
                int(video_capture.get(cv2.CAP_PROP_FRAME_HEIGHT)))) 
 
#读取视频帧,对视频帧进行高斯模糊,然后写入文件并在窗口显示 
success, frame = video_capture.read() 
while success and not cv2.waitKey(1) == 27: 
  blur_frame = cv2.GaussianBlur(frame, (3, 3), 0) 
  video_writer.write(blur_frame) 
  cv2.imshow("Video", blur_frame) 
  success, frame = video_capture.read() 
 
#回收资源 
cv2.destroyWindow('Video') 
video_capture.release()

我们来仔细看一下,Python OpenCV的模块名称是cv2,所以我们导入模块cv2,接下来,准备了显示视频帧的窗口。

获取摄像头视频使用VideoCapture类,其构造参数为摄像头的index,笔记本只有一个摄像头,其index为0;将视频帧写入文件使用VideoWriter类,其构造参数分别为写入的文件路径名,编码格式,帧率以及视频尺寸,我们这里的帧率和视频尺寸使用了摄像头提供的参数,这可以通过VideoCapture获取。

万事俱备,我们可以调用VideoCapture.read()按帧读取数据,每一帧视频就是一幅图像,我们对其进行高斯模糊,然后将其写入文件,并显示在窗口上。

我们在点击Esc时会退出视频预览和录制,之后销毁窗口并释放摄像头。

可以看到,Python的OpenCV依然表现出了Python代码的简洁性,这为我们提供了一种开发思路,可以在研究阶段使用Python,实现中使用C++实现。当然,如果对Python足够信任,完全可以直接使用Python,Python的OpenCV只是一套接口,真正的OpenCV代码是用C++实现的,其性能足够好,Python调用C/C++代码的效率也是不错的。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python版本坑:md5例子(python2与python3中md5区别)
Jun 20 Python
快速入门python学习笔记
Dec 06 Python
分分钟入门python语言
Mar 20 Python
python unittest实现api自动化测试
Apr 04 Python
Python文件如何引入?详解引入Python文件步骤
Dec 10 Python
Python3爬虫学习之将爬取的信息保存到本地的方法详解
Dec 12 Python
Python3多线程基础知识点
Feb 19 Python
对Python3之方法的覆盖与super函数详解
Jun 26 Python
python爬虫 urllib模块url编码处理详解
Aug 20 Python
用sqlalchemy构建Django连接池的实例
Aug 29 Python
如何查看Django ORM执行的SQL语句的实现
Apr 20 Python
Python数据清洗工具之Numpy的基本操作
Apr 22 Python
python实现多线程行情抓取工具的方法
Feb 28 #Python
Python 记录日志的灵活性和可配置性介绍
Feb 27 #Python
python定向爬取淘宝商品价格
Feb 27 #Python
python抓取文件夹的所有文件
Feb 27 #Python
python数据分析数据标准化及离散化详解
Feb 26 #Python
批量将ppt转换为pdf的Python代码 只要27行!
Feb 26 #Python
python 3利用Dlib 19.7实现摄像头人脸检测特征点标定
Feb 26 #Python
You might like
PHP学习之PHP表达式
2006/10/09 PHP
PHP使用NuSOAP调用Web服务的方法
2015/07/18 PHP
php通过会话控制实现身份验证实例
2016/10/18 PHP
php设计模式之状态模式实例分析【星际争霸游戏案例】
2020/03/26 PHP
IE6下通过a标签点击切换图片的问题
2010/11/14 Javascript
jQuery选择器源码解读(二):select方法
2015/03/31 Javascript
JavaScript分页功能的实现方法
2015/04/25 Javascript
如何使用AngularJs打造权限管理系统【简易型】
2016/05/09 Javascript
JavaScript根据CSS的Media Queries来判断浏览设备的方法
2016/05/10 Javascript
原生js封装运动框架的示例讲解
2017/10/01 Javascript
vue :src 文件路径错误问题的解决方法
2018/05/15 Javascript
React之PureComponent的使用作用
2018/07/10 Javascript
解决vue attr取不到属性值的问题
2018/09/18 Javascript
JS/HTML5游戏常用算法之碰撞检测 地图格子算法实例详解
2018/12/12 Javascript
[36:16]完美世界DOTA2联赛PWL S3 access vs Rebirth 第一场 12.19
2020/12/24 DOTA
Python解析json文件相关知识学习
2016/03/01 Python
说一说Python logging
2016/04/15 Python
Python加密方法小结【md5,base64,sha1】
2017/07/13 Python
Python爬虫 bilibili视频弹幕提取过程详解
2019/07/31 Python
对Python中一维向量和一维向量转置相乘的方法详解
2019/08/26 Python
pytorch nn.Conv2d()中的padding以及输出大小方式
2020/01/10 Python
Python networkx包的实现
2020/02/14 Python
使用OpenCV去除面积较小的连通域
2020/07/05 Python
利用python 下载bilibili视频
2020/11/13 Python
CSS3实现文字波浪线效果示例代码
2016/11/20 HTML / CSS
CSS3实现莲花绽放的动画效果
2020/11/06 HTML / CSS
美国睫毛、眉毛精华液领导品牌:RevitaLash Cosmetics
2018/03/26 全球购物
安全的后院和健身蹦床:JumpSport
2019/07/15 全球购物
员工拾金不昧表扬信
2014/01/09 职场文书
考试保密承诺书
2014/08/30 职场文书
教师查摆问题自查报告
2014/10/11 职场文书
男人帮观后感
2015/06/18 职场文书
《女娲补天》教学反思
2016/02/20 职场文书
从QQtabBar看css命名规范BEM的详细介绍
2021/08/07 HTML / CSS
《LOL》“克隆大作战”久违归来 幻灵战队皮肤上线
2022/04/03 其他游戏
以MySQL5.7为例了解一下执行计划
2022/04/13 MySQL