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深入学习之上下文管理器
Aug 31 Python
Python实现字符串格式化输出的方法详解
Sep 20 Python
Scrapy基于selenium结合爬取淘宝的实例讲解
Jun 13 Python
python 字典修改键(key)的几种方法
Aug 10 Python
python使用threading.Condition交替打印两个字符
May 07 Python
Python增强赋值和共享引用注意事项小结
May 28 Python
Python基于模块Paramiko实现SSHv2协议
Apr 28 Python
利用Python实现Excel的文件间的数据匹配功能
Jun 16 Python
Python如何将将模块分割成多个文件
Aug 04 Python
用python获取txt文件中关键字的数量
Dec 24 Python
python源码剖析之PyObject详解
May 18 Python
Python捕获、播放和保存摄像头视频并提高视频清晰度和对比度
Apr 14 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 数组基础知识小结
2010/08/20 PHP
php实现中文字符截取防乱码方法汇总
2015/04/29 PHP
PHP处理会话函数大总结
2015/08/05 PHP
实例分析PHP将字符串转换成数字的方法
2019/01/27 PHP
PHP使用反向Ajax技术实现在线客服系统详解
2019/07/01 PHP
jQuery Ajax 实例全解析
2011/04/20 Javascript
Dom 结点创建 基础知识
2011/10/01 Javascript
JavaScript 在网页上单击鼠标的地方显示层及关闭层
2012/12/30 Javascript
javascript弹性运动效果简单实现方法
2016/01/08 Javascript
input 禁止输入特殊字符的四种实现方式
2016/08/24 Javascript
BootStrap表单验证实例代码
2017/01/13 Javascript
JS实现标签页切换效果
2017/05/04 Javascript
Redux 和 Mobx的选择问题:让你不再困惑!
2017/09/18 Javascript
vue-router中scrollBehavior的巧妙用法
2018/07/09 Javascript
从零开始在NPM上发布一个Vue组件的方法步骤
2018/12/20 Javascript
通过实例讲解JS如何防抖动
2019/06/15 Javascript
谈谈python中GUI的选择
2018/03/01 Python
详解如何用django实现redirect的几种方法总结
2018/11/22 Python
python GUI库图形界面开发之PyQt5中QWebEngineView内嵌网页与Python的数据交互传参详细方法实例
2020/02/26 Python
Python插件机制实现详解
2020/05/04 Python
Python 实现图片转字符画的示例(静态图片,gif皆可)
2020/11/05 Python
使用BeautifulSoup4解析XML的方法小结
2020/12/07 Python
需要知道的CSS3动画技术
2010/01/01 HTML / CSS
Photobook澳大利亚:制作相片书,婚礼卡,旅行相簿
2017/01/12 全球购物
美国最大的旗帜经销商:Carrot-Top
2018/02/26 全球购物
DOUGLAS波兰:在线销售香水和化妆品
2020/07/05 全球购物
什么是.net的Remoting技术
2016/07/08 面试题
什么是URL
2015/12/13 面试题
内业资料员岗位职责
2014/01/04 职场文书
事务机电主管工作职责
2014/02/25 职场文书
舞蹈专业大学生职业规划范文
2014/03/12 职场文书
2014年“向国旗敬礼”网上签名寄语活动方案
2014/09/27 职场文书
观后感的写法
2015/06/19 职场文书
MySQL学习总结-基础架构概述
2021/04/05 MySQL
Python基础之进程详解
2021/05/21 Python
OpenCV中resize函数插值算法的实现过程(五种)
2021/06/05 Python