学到实用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 录制视频的更多相关文章

  1. day7 opencv+python 读取视频,没有东西

    1.读取视频man.avi, 报错. 我的视频和文件在同一目录下. #coding=utf-8 import numpy as np import cv2 cap = cv2.VideoCapture ...

  2. OpenCV+Python实现视频文件裁剪功能

    Python编程实现对视频文件进行剪切的功能.截取指定长度的视频并保存,运行后首先选择要裁剪的视频,然后输入开始时间点和停止时间点即可.将剪切后的视频保存为output.avi文件 所属网站分类: 资 ...

  3. OpenCV学习笔记 - Video Analysis - 录制视频

    录制视频 使用自带摄像头录制一段5s的短视频 error & solution fourcc1 = cv2.CV_FOURCC(', 'v') 在实践过程中,运行这一行时报错: 原因分析 在o ...

  4. OpenCV + python 实现人脸检测(基于照片和视频进行检测)

    OpenCV + python 实现人脸检测(基于照片和视频进行检测) Haar-like 通俗的来讲,就是作为人脸特征即可. Haar特征值反映了图像的灰度变化情况.例如:脸部的一些特征能由矩形特征 ...

  5. opencv+python视频实时质心显示

    利用opencv+python实现以下功能: 1)获取实时视频,分解帧频: 2)将视频做二值化处理: 3) 将视频做滤波处理(去除噪点,获取准确轮廓个数): 4)识别图像轮廓: 5)计算质心: 6)描 ...

  6. OpenCV录制视频,播放视频

    一.录制视频 获取摄像头操作 camObj = cv2.VideoCapture(0) :0为默认计算机默认摄像头,多个摄像头依次后面1.2.3 检查是否成功初始化: camObj.isOpen() ...

  7. Python OpenCV图片转视频 工具贴(三)

    Python OpenCV图片转视频 粘贴即用,注意使用时最好把自己的文件按照数字顺序命名.按照引导输入操作. # 一键傻瓜式引导图片串成视频 # 注意使用前最好把文件命名为数字顺序格式 import ...

  8. 在Ubuntu上录制视频和编辑(很全)

    Linux多媒体三剑客:GIMP,Inkscape,Blender3D Blender基金会制作的开源微电影Sintel:http://www.sintel.org/about电影采用Creative ...

  9. javaCV开发详解之2:推流器实现,推本地摄像头视频到流媒体服务器以及摄像头录制视频功能实现(基于javaCV-FFMPEG、javaCV-openCV)

    javaCV系列文章: javacv开发详解之1:调用本机摄像头视频 javaCV开发详解之2:推流器实现,推本地摄像头视频到流媒体服务器以及摄像头录制视频功能实现(基于javaCV-FFMPEG.j ...

随机推荐

  1. jQuery.noConflict() 函数详解

    jQuery.noConflict()函数用于让出jQuery库对变量$(和变量jQuery)的控制权. 一般情况下,在jQuery库中,变量$是变量jQuery的别名,它们之间是等价的,例如jQue ...

  2. kafka知识体系-kafka设计和原理分析-kafka leader选举

    kafka leader选举 一条消息只有被ISR中的所有follower都从leader复制过去才会被认为已提交.这样就避免了部分数据被写进了leader,还没来得及被任何follower复制就宕机 ...

  3. nginx方向代理

    nginx 的安装 # yum install nginx 新建配置文件 # vi /etc/nginx/conf.d/resume-xyz-8081.conf 配置 upstream resume ...

  4. [JLOI2015]管道连接

    题目描述 小铭铭最近进入了某情报部门,该部门正在被如何建立安全的通道连接困扰.该部门有 n 个情报站,用 1 到 n 的整数编号.给出 m 对情报站 ui;vi 和费用 wi,表示情报站 ui 和 v ...

  5. 亲戚(relative)

    [题目背景] Y 家是世界上最大的家族,HJZ 是其中一员. 现在 Y 家人想要拍一张全家福,却发现这是一个十分复杂的问题. . . . . . [题目描述] Y 家一共有 n 人 其中每个人最多有一 ...

  6. ●BZOJ 1499 [NOI2005]瑰丽华尔兹

    题链: http://www.lydsy.com/JudgeOnline/problem.php?id=1499 题解: 单调队列优化DP 定义 dp[t][x][y] 表示第t个时间段之后,处在(x ...

  7. ●BZOJ 3238 [Ahoi2013]差异

    题链: http://www.lydsy.com/JudgeOnline/problem.php?id=3238 题解: 后缀数组套路深. 问题转化为求出任意两个后缀的LCP之和 在计算贡献时,各种不 ...

  8. 【NOIP2012-开车旅行】

    这道题:你不仅要学会两人交换开车,还要做到高效驾驶. ·分析:       在拨开花哨题目的迷雾之后,发现两个重要突破口:       ①从每个点开始,他们的路径是一定的,不存在决策选取.       ...

  9. SPOJ 7258 Lexicographical Substring Search

    Little Daniel loves to play with strings! He always finds different ways to have fun with strings! K ...

  10. Python中的文件路径的分隔符

    主要是需要考虑分隔符的问题: 在Windows系统下的分隔符是:\ (反斜杠). 在Linux系统下的分隔符是:/(斜杠). 当在字符中出现\时,大家就要考虑到转义字符了. 转义字符的概念,参考维基百 ...