学到实用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. [LeetCode] My Calendar I 我的日历之一

    Implement a MyCalendar class to store your events. A new event can be added if adding the event will ...

  2. [ZJOI2010]基站选址

    题目描述 有N个村庄坐落在一条直线上,第i(i>1)个村庄距离第1个村庄的距离为Di.需要在这些村庄中建立不超过K个通讯基站,在第i个村庄建立基站的费用为Ci.如果在距离第i个村庄不超过Si的范 ...

  3. [USACO09FEB]改造路Revamping Trails

    题目描述 Farmer John dutifully checks on the cows every day. He traverses some of the M (1 <= M <= ...

  4. UOJ #206. 【APIO2016】Gap

    Description Solution 第一个子任务,直接从 \((a[i],a[j])\) 推出 \((a[i+1],a[j-1])\) 就行了,只需要 \(\frac{N+1}{2}\) 第二个 ...

  5. bzoj 5289: [Hnoi2018]排列

    Description Solution 首先注意到实际上约束关系构成了一棵树 考虑这个排列 \(p\),编号为 \(a[i]\) 的出现了,\(i\) 才可以出现 那么如果连边 \((a[i],i) ...

  6. [BZOJ]2589: Spoj 10707 Count on a tree II

    Time Limit: 20 Sec  Memory Limit: 400 MB Description 给定一棵N个节点的树,每个点有一个权值,对于M个询问(u,v),你需要回答u xor last ...

  7. 【USACO11NOV】牛的阵容Cow Lineup 尺取法+哈希

    题目描述 Farmer John has hired a professional photographer to take a picture of some of his cows. Since ...

  8. poj 1741 树的点分治(入门)

    Tree Time Limit: 1000MS   Memory Limit: 30000K Total Submissions: 18205   Accepted: 5951 Description ...

  9. 习题9-3 UVA1629(dp)

    Cake Slicing 题意:有一个n行m列的网格上有一些黑点,要求进行切割,使最后每块上只有一个黑点,求最少的刀数 思路:记忆化搜索,枚举每一条边来切,每一次搜索自己所能切割的所有情况取最小值 但 ...

  10. face-alignment:用 pytorch 实现的 2D 和 3D 人脸对齐库

    使用世界上最准确的面对齐网络从 Python 检测面部地标,能够在2D和3D坐标中检测点. 项目地址:https://github.com/1adrianb/face-alignment 作者: 阿德 ...