OpenCV Python 录制视频

简介: 调用摄像头引入库支持初始化调整界面大小实时显示录制视频并保存fourcc问题解决代码实现效果展示总结学到实用OpenCV调用笔记本电脑的摄像头,并录制视频保存到本地硬盘的时候,出现了一点故障,那就是获取到的文件总是为0KB。

学到实用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下录制视频文件大小为零的异常
  • 修改图像显示窗体大小的两种方式
  • 录制视频的过程中,输出为快慢镜头的调节方式
目录
相关文章
|
2月前
|
存储 计算机视觉 异构计算
使用python&C++对bubbliiiing的yolo系列进行opencv.dnn进行推理部署
使用python&C++对bubbliiiing的yolo系列进行opencv.dnn进行推理部署
36 0
|
2月前
|
机器学习/深度学习 算法 数据可视化
计算机视觉+深度学习+机器学习+opencv+目标检测跟踪+一站式学习(代码+视频+PPT)-2
计算机视觉+深度学习+机器学习+opencv+目标检测跟踪+一站式学习(代码+视频+PPT)
96 0
|
2月前
|
机器学习/深度学习 Ubuntu Linux
计算机视觉+深度学习+机器学习+opencv+目标检测跟踪+一站式学习(代码+视频+PPT)-1
计算机视觉+深度学习+机器学习+opencv+目标检测跟踪+一站式学习(代码+视频+PPT)
54 1
|
3月前
|
存储 监控 开发工具
Baumer工业相机堡盟工业相机如何联合NEOAPI SDK和OpenCV实现相机图像转换为AVI视频格式(C++)
Baumer工业相机堡盟工业相机如何联合NEOAPI SDK和OpenCV实现相机图像转换为AVI视频格式(C++)
35 0
|
1天前
|
机器学习/深度学习 算法 自动驾驶
opencv python 图片叠加
【4月更文挑战第17天】
|
9天前
|
编解码 计算机视觉 Python
opencv 图像金字塔(python)
opencv 图像金字塔(python)
|
9天前
|
算法 Serverless 计算机视觉
opencv 直方图处理(python)
opencv 直方图处理(python)
|
23天前
|
数据采集 XML 程序员
揭秘YouTube视频世界:利用Python和Beautiful Soup的独特技术
本文介绍了如何使用Python和Beautiful Soup库抓取YouTube视频数据,包括标题、观看次数和点赞、踩的数量。通过亿牛云爬虫代理IP服务避免被网站屏蔽,提供代理服务器配置和请求头设置示例。代码可能需根据YouTube页面更新进行调整。
揭秘YouTube视频世界:利用Python和Beautiful Soup的独特技术
|
1月前
|
数据采集 JSON API
使用Python获取B站视频并在本地实现弹幕播放功能
使用Python获取B站视频并在本地实现弹幕播放功能
18 0
|
1月前
|
计算机视觉 Python
怎么使用Python轻松打造淘宝主图视频生成神器
怎么使用Python轻松打造淘宝主图视频生成神器
39 0