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利用matplotlib生成图片背景及图例透明的效果
Apr 27 Python
python调用系统ffmpeg实现视频截图、http发送
Mar 06 Python
Python Django框架实现应用添加logging日志操作示例
May 17 Python
简单了解python反射机制的一些知识
Jul 13 Python
Django Channels 实现点对点实时聊天和消息推送功能
Jul 17 Python
python3字符串操作总结
Jul 24 Python
在django中实现页面倒数几秒后自动跳转的例子
Aug 16 Python
python并发爬虫实用工具tomorrow实用解析
Sep 25 Python
Python连接Oracle之环境配置、实例代码及报错解决方法详解
Feb 11 Python
Python日期格式和字符串格式相互转换的方法
Feb 18 Python
Python configparser模块配置文件过程解析
Mar 03 Python
python中读入二维csv格式的表格方法详解(以元组/列表形式表示)
Apr 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删除xml文档内容的方法
2015/01/23 PHP
PHP实现的最大正向匹配算法示例
2017/12/19 PHP
laravel与thinkphp之间的区别与优缺点
2021/03/02 PHP
Aster vs Newbee BO3 第三场2.18
2021/03/10 DOTA
JS支持带x身份证号码验证函数
2008/08/10 Javascript
扩展javascript的Date方法实现代码(prototype)
2010/11/20 Javascript
Jquery实现仿新浪微博获取文本框能输入的字数代码
2013/02/22 Javascript
JavaScript中几个重要的属性(this、constructor、prototype)介绍
2013/05/19 Javascript
jquery专业的导航菜单特效代码分享
2015/08/29 Javascript
Javascript使用function创建类的两种方法(推荐)
2016/11/19 Javascript
微信小程序 参数传递实例代码
2017/03/20 Javascript
使用Angular CLI生成 Angular 5项目教程详解
2018/03/18 Javascript
微信小程序+腾讯地图开发实现路径规划绘制
2019/05/22 Javascript
在JavaScript中使用严格模式(Strict Mode)
2019/06/13 Javascript
vue实现中部导航栏布局功能
2019/07/30 Javascript
JavaScript RegExp 对象用法详解
2019/09/24 Javascript
Vue 嵌套路由使用总结(推荐)
2020/01/13 Javascript
[00:09]DOTA2全国高校联赛 精彩活动引爆全场
2018/05/30 DOTA
[51:30]OG vs LGD 2018国际邀请赛淘汰赛BO3 第二场 8.26
2018/08/30 DOTA
python基础教程之缩进介绍
2014/08/29 Python
Python常用内置函数总结
2015/02/08 Python
pygame游戏之旅 如何制作游戏障碍
2018/11/20 Python
Python学习笔记之图片人脸检测识别实例教程
2019/03/06 Python
python实现Excel文件转换为TXT文件
2019/04/28 Python
Pandas之Dropna滤除缺失数据的实现方法
2019/06/25 Python
python匿名函数用法实例分析
2019/08/03 Python
python3中使用__slots__限定实例属性操作分析
2020/02/14 Python
Python3标准库之dbm UNIX键-值数据库问题
2020/03/24 Python
CSS3 background-image颜色渐变的实现代码
2018/09/13 HTML / CSS
新西兰最大的品牌运动鞋购物网站:Platypus NZ
2017/10/27 全球购物
美国婴儿和儿童家具网上商店:ABaby.com
2018/07/02 全球购物
Linux的主要特性
2014/10/06 面试题
《云雀的心愿》教学反思
2014/02/25 职场文书
2016年大学生社区服务活动总结
2016/04/06 职场文书
2016年度农村党员干部主题教育活动总结
2016/04/06 职场文书
python中Pyqt5使用Qlabel标签播放视频
2022/04/22 Python