【OpenCV中文手册学习-2】视频的读写和窗口显示

一、读入视频

1.1 从摄像头读入视频

函数原型

VideoCapture(flag)
# flag : 设备索引,一般设为0

1.2 读入视频文件

VideoCapture是一个重载函数

函数原型

VideoCapture(filename)
# filename: 视频文件路径

二、显示视频

思路概述

  • 循环从摄像头或视频文件中读入一帧;
  • 对该帧进行用户希望的处理,如灰度化、翻转或其他复杂操作;
  • 将处理后的图像用imshow显示出来

要点
通过waitKey设置读入帧的间隔,间隔越长视频越卡顿。

三、写入视频

FourCC:是用于指定视频编解码器的4字节代码。

下面代码实现将摄像头中的视频录制到指定文件。

# 1.获取摄像头
cap = cv.VideoCapture(0)
# 2.定义编解码器并创建VideoWriter对象
fourcc = cv.VideoWriter_fourcc(*'XVID')
# 3.创建写出流
out = cv.VideoWriter('output.avi', fourcc, 20.0, (640,  480))
while True:
	ret,frame = cap.read()
	# ...(执行一些步骤对frame进行一定处理)
	# 4. 写入帧
	out.write(frame)
	# 写入间隔为1s
	if cv.waitKey(1) == ord('q'):
    	break
# 5. 释放设备和写出流
cap.release()
out.release()

四、程序演示

下面这个程序实现将摄像头拍摄下来的画面水平翻转后保存到 avi 文件中。拍摄时帧捕捉间隔为1ms一帧,当用户按下 q 键时退出录制。

import cv2 as cv

def test():
    cap = cv.VideoCapture(0)
    # 定义编解码器并创建VideoWriter对象
    fourcc = cv.VideoWriter_fourcc(*'XVID')
    out = cv.VideoWriter('output.avi', fourcc, 20.0, (640,  480))

    if not cap.isOpened():
        print("无法打开摄像头")
        exit()
        
    while True:
        # 逐帧捕获
        ret, frame = cap.read()
        # 如果正确读取帧,ret为True
        if not ret:
            print("无法正确读入该帧...")
            break  
        # 翻转图像
        img = cv.flip(frame,1)
        # 显示结果帧e
        cv.imshow('frame', img)
        # 写入流写入该帧
        out.write(img)
        # 帧捕捉间隔为1s
        if cv.waitKey(1) == ord('q'):
            break
    # 完成所有操作后,释放捕获器
    cap.release()
    out.release()
    cv.destroyAllWindows()

if __name__ == "__main__":
    test()
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值