OpenCV Python 录制视频
学到实用OpenCV调用笔记本电脑的摄像头,并录制视频保存到本地硬盘的时候,出现了一点故障,那就是获取到的文件总是为0KB。经过一番查找,终于找到了解决办法。
调用摄像头
调用摄像头作为本实验的基础是必不可少的,因为我们很有可能在初始化的这一步出错,而导致整个视频录制的失败。
引入库支持
import cv2
初始化
初始化的时候,参数可以是整数,也可以是外部的视频文件的名称。这里需要强调的是整数类型。
通常来说,笔记本电脑内置了一个摄像头,我们用0代表,其余的外接摄像头我们可以按照具体的情况来使用1,2,3··· ··· 来进行调用和数据的采集。
cap = cv2.VideoCapture(0)
有的时候,我们初始化完成了,但是并不知道到底成功了没有,这时,我们可以调用cap.isOpened()方法来侦测。
调整界面大小
默认的窗体界面是640X480的,但是我们却也可以修改,有固定方式和可任意调节方式。
- 固定大小方式:
cap = cv2.VideoCapture(0)
# cap.set(3,1080)
# cap.set(4,720)
- 窗口可任意调节方式:
cv2.namedWindow(cv2.WINDOW_NORMAL)
实时显示
实时显示就是将OpenCV采集到的一帧一帧的数据实时的显示到界面窗体上。
import cv2
# 初始化摄像头
cap = cv2.VideoCapture(0)
while cap.isOpened():
# 采集一帧一帧的图像数据
isSuccess,frame = cap.read()
# 实时的将采集到的数据显示到界面上
if isSuccess:
cv2.imshow("My Capture",frame)
# 实现按下“q”键退出程序
if cv2.waitKey(1)&0xFF == ord('q'):
break
# 释放摄像头资源
cap.release()
cv2.destoryAllWindows()
如此,便可以实时的获取到摄像头采集到的数据了。
录制视频并保存
学会了如何采集数据,下一步就是将采集到的数据写入到一个视频文件中。这就涉及到了编码的问题了,因为将图片写到视频文件中需要实时的压缩,处理。所以我们的电脑上要装有相应的码库。
fourcc问题解决
一开始我是用的fourcc是:
fourcc = cv2.VideoWriter_fourcc(*"XVID")
但是总是不能正确的录制出视频文件,显示大小为0KB。最后发现是电脑上没有响应的视频解码库导致的。
解决办法:
- 一开始按照网上的参考资料,说是将out的第二个参数写为-1,这样运行的时候会弹出系统拥有的压缩方式,即可解决。但是在博主亲试之下,完美的失败了。 :(
- 第二种方式,博主亲测有效,改变了fourcc的类型。
fourcc = cv2.cv.CV_FOURCC("D", "I", "B", " ")
代码实现
下面看一个完整的录制视频的小例子。
# coding:utf-8
import sys
reload(sys)
sys.setdefaultencoding('utf8')
# __author__ = '郭 璞'
# __date__ = '2016/9/7'
# __Desc__ = 使用Python借助opencv实现对图像的读取,写入
import cv2
import numpy as np
# 选取摄像头,0为笔记本内置的摄像头,1,2···为外接的摄像头
cap = cv2.VideoCapture(0)
# cap.set(3,1080)
# cap.set(4,720)
# 为保存视频做准备
fourcc = cv2.cv.CV_FOURCC("D", "I", "B", " ")
# 第三个参数则是镜头快慢的,20为正常,小于二十为慢镜头
out = cv2.VideoWriter('output2.avi', fourcc,3.0,(640,480))
while True:
# 一帧一帧的获取图像
ret,frame = cap.read()
if ret == True:
frame = cv2.flip(frame, 1)
# 在帧上进行操作
# gray = cv2.cvtColor(frame,cv2.COLOR_BGR2GRAY)
# 开始保存视频
out.write(frame)
# 显示结果帧
cv2.imshow("frame", frame)
if cv2.waitKey(1) & 0xFF == ord('q'):
break
else:
break
# 释放摄像头资源
cap.release()
out.release()
cv2.destroyAllWindows()
效果展示
亲测有效!
总结
本次试验收获有:
- 如何使用OpenCV配合Python实时捕获摄像头数据
- windows下录制视频文件大小为零的异常
- 修改图像显示窗体大小的两种方式
- 录制视频的过程中,输出为快慢镜头的调节方式
OpenCV Python 录制视频的更多相关文章
- day7 opencv+python 读取视频,没有东西
1.读取视频man.avi, 报错. 我的视频和文件在同一目录下. #coding=utf-8 import numpy as np import cv2 cap = cv2.VideoCapture ...
- OpenCV+Python实现视频文件裁剪功能
Python编程实现对视频文件进行剪切的功能.截取指定长度的视频并保存,运行后首先选择要裁剪的视频,然后输入开始时间点和停止时间点即可.将剪切后的视频保存为output.avi文件 所属网站分类: 资 ...
- OpenCV学习笔记 - Video Analysis - 录制视频
录制视频 使用自带摄像头录制一段5s的短视频 error & solution fourcc1 = cv2.CV_FOURCC(', 'v') 在实践过程中,运行这一行时报错: 原因分析 在o ...
- OpenCV + python 实现人脸检测(基于照片和视频进行检测)
OpenCV + python 实现人脸检测(基于照片和视频进行检测) Haar-like 通俗的来讲,就是作为人脸特征即可. Haar特征值反映了图像的灰度变化情况.例如:脸部的一些特征能由矩形特征 ...
- opencv+python视频实时质心显示
利用opencv+python实现以下功能: 1)获取实时视频,分解帧频: 2)将视频做二值化处理: 3) 将视频做滤波处理(去除噪点,获取准确轮廓个数): 4)识别图像轮廓: 5)计算质心: 6)描 ...
- OpenCV录制视频,播放视频
一.录制视频 获取摄像头操作 camObj = cv2.VideoCapture(0) :0为默认计算机默认摄像头,多个摄像头依次后面1.2.3 检查是否成功初始化: camObj.isOpen() ...
- Python OpenCV图片转视频 工具贴(三)
Python OpenCV图片转视频 粘贴即用,注意使用时最好把自己的文件按照数字顺序命名.按照引导输入操作. # 一键傻瓜式引导图片串成视频 # 注意使用前最好把文件命名为数字顺序格式 import ...
- 在Ubuntu上录制视频和编辑(很全)
Linux多媒体三剑客:GIMP,Inkscape,Blender3D Blender基金会制作的开源微电影Sintel:http://www.sintel.org/about电影采用Creative ...
- javaCV开发详解之2:推流器实现,推本地摄像头视频到流媒体服务器以及摄像头录制视频功能实现(基于javaCV-FFMPEG、javaCV-openCV)
javaCV系列文章: javacv开发详解之1:调用本机摄像头视频 javaCV开发详解之2:推流器实现,推本地摄像头视频到流媒体服务器以及摄像头录制视频功能实现(基于javaCV-FFMPEG.j ...
随机推荐
- Mybatis JPA 插件简介(v2.1.0)
相比之前的版本(v1.1.0),此版本(v2.1.0)做了较大的改动. 项目地址: github https://github.com/cnsvili/mybatis-jpa gitee https: ...
- [Codeforces 873B]Balanced Substring
Description You are given a string s consisting only of characters 0 and 1. A substring [l, r] of s ...
- [JSOI2007]合金
Description 某公司加工一种由铁.铝.锡组成的合金.他们的工作很简单.首先进口一些铁铝锡合金原材料,不同种类的 原材料中铁铝锡的比重不同.然后,将每种原材料取出一定量,经过融解.混合,得到新 ...
- ●BZOJ 4407 于神之怒加强版
题链: http://www.lydsy.com/JudgeOnline/problem.php?id=4407 题解: 莫比乌斯反演 直接套路化式子 $\begin{align*}ANS&= ...
- hdu 5391 (数论)
Zball in Tina Town Time Limit: 3000/1500 MS (Java/Others) Memory Limit: 262144/262144 K (Java/Oth ...
- hdu2795 线段树 贴广告
Billboard Time Limit: 20000/8000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total ...
- [BZOJ]4650 优秀的拆分(Noi2016)
比较有意思的一道后缀数组题.(小C最近是和后缀数组淦上了?) 放在NOI的考场上.O(n^3)暴力80分,O(n^2)暴力95分…… 即使想把它作为一道签到题也不要这么随便啊摔(╯‵□′)╯︵┻━┻ ...
- 【bzoj4571&&SCOI2016美味】
4571: [Scoi2016]美味 Time Limit: 30 Sec Memory Limit: 256 MBSubmit: 656 Solved: 350[Submit][Status][ ...
- Mac下Git安装及配置
Mac下: 1.下载git版本并安装 运行终端 查看git版本: bogon:~ yan$ git --version git version 2.16.3 配置gitconfig文件 vim ~/. ...
- 阿里云部署mongdb(CentOS)
配置包管理系统 (yum). Xshell登录Linux查看操作系统版本信息 lsb release -a 可以在官网选择对应的版本 :官网的安装指导文档http://docs.mongodb.org ...