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字符串编码识别模块chardet简单应用
Jun 15 Python
Scrapy抓取京东商品、豆瓣电影及代码分享
Nov 23 Python
浅谈tensorflow中几个随机函数的用法
Jul 27 Python
对python中的 os.mkdir和os.mkdirs详解
Oct 16 Python
Python中的 enum 模块源码详析
Jan 09 Python
python 通过类中一个方法获取另一个方法变量的实例
Jan 22 Python
Python符号计算之实现函数极限的方法
Jul 15 Python
python实现上传文件到linux指定目录的方法
Jan 03 Python
Django模板之基本的 for 循环 和 List内容的显示方式
Mar 31 Python
Python日志器使用方法及原理解析
Sep 27 Python
python中的插入排序的简单用法
Jan 19 Python
Python Pycharm虚拟下百度飞浆PaddleX安装报错问题及处理方法(亲测100%有效)
May 24 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中rename函数用法分析
2014/11/15 PHP
php中Array2xml类实现数组转化成XML实例
2014/12/08 PHP
Yii数据模型中rules类验证器用法分析
2016/07/15 PHP
js计算页面刷新的次数
2009/07/20 Javascript
firefox firebug中文入门教程 脚本之家新年特别版
2010/01/02 Javascript
jquery 设置style:display的方法
2015/01/29 Javascript
在Node.js应用中读写Redis数据库的简单方法
2015/06/30 Javascript
jQuery实现模仿微博下拉滚动条加载数据效果
2015/12/25 Javascript
使用BootStrap进行轮播图的制作
2017/01/06 Javascript
12个非常有用的JavaScript技巧
2017/05/17 Javascript
bootstrap3使用bootstrap datetimepicker日期插件
2017/05/24 Javascript
JavaScript事件处理程序详解
2017/09/19 Javascript
详细分析单线程JS执行问题
2017/11/22 Javascript
基于Bootstrap实现城市三级联动
2017/11/23 Javascript
微信小程序switch组件使用详解
2018/01/31 Javascript
JavaScript格式化json和xml的方法示例
2019/01/22 Javascript
JS实现查找数组中对象的属性值是否存在示例
2019/05/24 Javascript
highcharts.js数据绑定方式代码实例
2019/11/13 Javascript
Javascript生成器(Generator)的介绍与使用
2021/01/31 Javascript
[57:37]EG vs Mineski 2018国际邀请赛小组赛BO2 第二场 8.16
2018/08/17 DOTA
web.py在模板中输出美元符号的方法
2014/08/26 Python
python实现微信自动回复功能
2018/04/11 Python
Python WEB应用部署的实现方法
2019/01/02 Python
Python实现简单的列表冒泡排序和反转列表操作示例
2019/07/10 Python
解决tensorflow添加ptb库的问题
2020/02/10 Python
深入了解Python 变量作用域
2020/07/24 Python
Django搭建项目实战与避坑细节详解
2020/12/06 Python
HTML5的一个显示电池状态的API简介
2015/06/18 HTML / CSS
求高于平均分的学生学号及成绩
2016/09/01 面试题
解决方案设计综合面试题
2015/08/31 面试题
公务员政审个人鉴定
2014/02/25 职场文书
车辆年审委托书范本
2014/09/18 职场文书
民主生活会对照检查材料范文
2014/10/01 职场文书
催款律师函范文
2015/05/27 职场文书
Python实现双向链表
2022/05/25 Python
在python中读取和写入CSV文件详情
2022/06/28 Python