python OpenCV学习笔记(二):视频加载、展示、存储

文章目录

  • 1.从摄像头捕获视频
  • 2.保存视频

1.从摄像头捕获视频

OpenCV提供了一个非常简单的接口,用来相机捕捉实时流。
任务:从相机中获取一个视频,把它转换成灰度级的视频并显示出来。

要捕获一个视频,你需要创建一个可视的对象cv.VideoCapture()。参数可以是设备索引,也可以是视频文件的名称(这里用视频文件名称)。设备索引只是指定哪个摄像头的号码,如0、1、2。

import cv2 as cv

cap = cv.VideoCapture(0)
while cap.isOpened():
    # 逐帧捕获
    ret, frame = cap.read()
    # 对帧进行操作
    gray = cv.cvtColor(frame, cv.COLOR_BGR2GRAY)
    # 展示结果
    cv.imshow('frame', gray)
    if cv.waitKey(1) & 0xFF == ord('q'):
        break

# 一切完成后,释放捕获
cap.release()
cv.destroyAllWindows()

cap.isOpened()
检测cap是否被初始化捕获,如果没有,使用cap.open()打开它
cap.read()
返回值第一个数为布尔类型,帧(frame)读取正确,则返回true
cv.waitKey()
值如果设置过小,则视频播放速度会变快,反之则会更慢,正常速度设置成25左右。

2.保存视频

捕获视频之后,逐帧浏览,如果想保存帧为图片,使用cv.imwrite()就行了,如果想保存视频,则需要多做几步。

import cv2 as cv

cap = cv.VideoCapture('test.mp4')

# 定义编码器,并创建可视对象
fourcc = cv.VideoWriter_fourcc(*'XVID')
out = cv.VideoWriter('output.avi', fourcc, 20.0, (640, 480))

while cap.isOpened():
    ret, frame = cap.read()
    if ret == True:
        frame = cv.flip(frame, 0)
        # 写入翻转的帧
        out.write(frame)
        cv.imshow('frame', frame)
        if cv.waitKey(1) & 0xFF == ord('q'):
            break
    else:
        break

# 完成工作,释放所有对象
cap.release()
out.release()
cv.destroyAllWindows()

VideoWriter(const String & filename, int fourcc, double fps, Size frameSize, bool isColor=true)

  • 传入指定输出文件名(String & filename)
  • 指定fourcc代码(fourcc)
  • 每秒帧数(fps)
  • 帧数大小(frameSize)
  • isColor默认为True

FourCC是一种用于指定视频编码器的4字节码,可用代码列表详见fourcc.org,不同的编码依赖于平台

FourCC代码生成MJPG可通过以下两种形式:
1.cv.VideoWriter_fourcc(‘M’, ‘J’, ‘P’, ‘G’)
2.cv.VideoWriter_fourcc(*‘MJPG’)

cv.filp(src, flipCode[, dst])

  • flipCode指定如何翻转,0意味着在x轴翻转,大于0意味着在y轴上翻转,小于0意味着两个轴同时翻转

你可能感兴趣的:(语法基础)