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搜索指定目录的方法
Apr 29 Python
Python中map和列表推导效率比较实例分析
Jun 17 Python
Python解析excel文件存入sqlite数据库的方法
Nov 15 Python
神经网络python源码分享
Dec 15 Python
python互斥锁、加锁、同步机制、异步通信知识总结
Feb 11 Python
python自动发邮件库yagmail的示例代码
Feb 23 Python
idea创建springMVC框架和配置小文件的教程图解
Sep 18 Python
Python获取命令实时输出-原样彩色输出并返回输出结果的示例
Jul 11 Python
解决python多行注释引发缩进错误的问题
Aug 23 Python
利用Python产生加密表和解密表的实现方法
Oct 15 Python
Python 获取命令行参数内容及参数个数的实例
Dec 20 Python
Python 简单计算要求形状面积的实例
Jan 18 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
Laravel中的chunk组块结果集处理与注意问题
2018/08/15 PHP
URI、URL和URN之间的区别与联系
2006/12/20 Javascript
jquery原创弹出层折叠效果点击折叠弹出一个层
2014/03/12 Javascript
js自动生成的元素与页面原有元素发生堆叠的解决方法
2014/09/04 Javascript
node.js中的fs.write方法使用说明
2014/12/15 Javascript
jQuery实现鼠标悬停显示提示信息窗口的方法
2015/04/30 Javascript
jQuery仿gmail实现fixed布局的方法
2015/05/27 Javascript
jQuery使用animate创建动画用法实例
2015/08/07 Javascript
jQuery简单实现页面元素置顶时悬浮效果示例
2016/08/01 Javascript
JavaScript lodash常见用法系列小结
2016/08/24 Javascript
常用Javascript函数与原型功能收藏(必看篇)
2016/10/09 Javascript
详解获取jq ul第一个li定位的四种解决方案
2016/11/23 Javascript
微信小程序开发之大转盘 仿天猫超市抽奖实例
2016/12/08 Javascript
javascript读取文本节点方法小结
2016/12/15 Javascript
原生js实现淘宝购物车功能
2020/06/23 Javascript
详解Angular2响应式表单
2017/06/14 Javascript
vue.js移动端app实战1:初始配置详解
2017/07/24 Javascript
详解webpack的proxyTable无效的解决方案
2018/06/15 Javascript
快速解决处理后台返回json数据格式的问题
2018/08/07 Javascript
vue router 源码概览案例分析
2018/10/09 Javascript
修改默认的pip版本为对应python2.7的方法
2018/11/06 Python
python sqlite的Row对象操作示例
2019/09/11 Python
Django 限制访问频率的思路详解
2019/12/24 Python
没编程基础可以学python吗
2020/06/17 Python
python能做哪些生活有趣的事情
2020/09/09 Python
几款好用的python工具库(小结)
2020/10/20 Python
python制作微博图片爬取工具
2021/01/16 Python
简单几步用纯CSS3实现3D翻转效果
2019/01/17 HTML / CSS
css3实现蒙版弹幕功能
2019/06/18 HTML / CSS
Richards网上商店:当代时尚,遍布巴西
2019/11/03 全球购物
Everlast官网:拳击、综合格斗和健身相关的体育用品
2020/08/03 全球购物
会计专业自我鉴定范文
2013/10/06 职场文书
优秀班主任先进事迹材料
2014/12/16 职场文书
简爱读书笔记
2015/06/26 职场文书
2019年暑期安全广播稿!
2019/07/03 职场文书
mysql sock 文件解析及作用讲解
2022/07/15 MySQL