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实现数通设备端口使用情况监控实例
Jul 15 Python
使用Python的Twisted框架编写非阻塞程序的代码示例
May 25 Python
Python中模块与包有相同名字的处理方法
May 05 Python
python实现机器人行走效果
Jan 29 Python
Pandas 同元素多列去重的实例
Jul 03 Python
Python 多线程不加锁分块读取文件的方法
Dec 11 Python
Python实现合并excel表格的方法分析
Apr 13 Python
Pycharm新手教程(只需要看这篇就够了)
Jun 18 Python
Python 分享10个PyCharm技巧
Jul 13 Python
Django框架 Pagination分页实现代码实例
Sep 04 Python
使用Python将Exception异常错误堆栈信息写入日志文件
Apr 08 Python
Python中json.dumps()函数的使用解析
May 17 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
在项目中寻找代码的坏命名
2012/07/14 PHP
PHP实现图片不变型裁剪及图片按比例裁剪的方法
2016/01/14 PHP
Zend Framework动作助手FlashMessenger用法详解
2016/03/05 PHP
老司机传授Ubuntu下Apache+PHP+MySQL环境搭建攻略
2016/03/20 PHP
Yii2.0 模态弹出框+ajax提交表单
2016/05/22 PHP
Yii数据读取与跳转参数传递用法实例分析
2016/07/12 PHP
一些易混淆且不常用的属性,希望有用
2007/01/29 Javascript
Jquery 绑定时间实现代码
2011/05/03 Javascript
多浏览器兼容性比较好的复制到剪贴板的js代码
2011/10/09 Javascript
javascript中不等于的代码是什么怎么写
2013/12/29 Javascript
jQuery实现Div拖动+键盘控制综合效果的方法
2015/03/10 Javascript
JS模拟键盘打字效果的方法
2015/08/05 Javascript
不依赖Flash和任何JS库实现文本复制与剪切附源码下载
2015/10/09 Javascript
JS实现网页上随滚动条滚动的层效果代码
2015/11/04 Javascript
jquery+json实现数据二级联动的方法
2015/11/28 Javascript
JavaScript实现九九乘法表的简单实例
2016/06/07 Javascript
AngularJS入门教程之过滤器详解
2016/08/19 Javascript
Vue.use()在new Vue() 之前使用的原因浅析
2019/08/26 Javascript
不刷新网页就能链接新的js文件方法总结
2020/03/01 Javascript
在Echarts图中给坐标轴加一个标识线markLine
2020/07/20 Javascript
vue项目接口域名动态获取操作
2020/08/13 Javascript
python快速排序代码实例
2013/11/21 Python
Python中使用platform模块获取系统信息的用法教程
2016/07/08 Python
Python实现的查询mysql数据库并通过邮件发送信息功能
2018/05/17 Python
python函数超时自动退出的实操方法
2020/12/28 Python
CSS3转换功能transform主要属性值分析及实现分享
2012/05/06 HTML / CSS
美国豪华的多品牌精品店:The Webster
2019/07/31 全球购物
纬创Java面试题笔试题
2014/10/02 面试题
车间班组长的职责
2013/12/13 职场文书
两只小狮子教学反思
2014/02/05 职场文书
历史专业学生的自我评价
2014/02/28 职场文书
科长竞聘演讲稿
2014/05/16 职场文书
工作疏忽检讨书500字
2014/10/26 职场文书
三年级学生期末评语
2014/12/26 职场文书
读《推着妈妈去旅行》有感1500字
2019/10/15 职场文书
一文彻底理解js原生语法prototype,__proto__和constructor
2021/10/24 Javascript