【OpenCV】6 摄像头调用/视频保存/修改视频格式

1 摄像头调用cv2.VideoCapture()+cap.read()

流程:先实例化VideoCapture,再使用cap.read读取摄像头数据
函数1:cv2.VideoCapture()
参数说明: 0,1代表电脑摄像头,或视频文件路径

函数2:ret,frame = cap.read()
----说明: 按帧读取视频,返回ret和frame
-------------ret: 返回布尔值True/False,如果读取帧是正确的则返回True,若读到结尾返回False
-------------frame: 每一帧图像,是一个三维矩阵

# 摄像头调用
import cv2
# 0 ,1代表电脑摄像头, 或视频文件路径
cap = cv2.VideoCapture(0) # 创建VideoCapture对象
while(cap.isOpened()):
    ret, frame = cap.read() # ret:读取帧正确,返回True, frame:为三维矩阵
                                                   # 若文件读取到结尾,则ret返回False                     
    cv2.imshow('frame', frame)
    if cv2.waitKey(1) & 0xFF==ord('q'):# 按下“q”键停止
        break
cap.release()
cv2.destroyAllWindows()

2 播放、保存视频

流程:先实例化VideoCapture,创建编码方式cv2.VideoWriter_fourcc(‘M’,‘J’,‘P’,‘G’),实例化cv2.VideoWriter(src,fourcc, 20.0,(640,480),True),再调用write一帧一帧写入

创建编码方式 :cv2.VideoWriter_fourcc(‘M’,‘J’,‘P’,‘G’)
说明:不同编码方式对应表在后面

创建VideoWriter对象:cv2.VideoWriter(src,fourcc, 20.0,(640,480),True)
------参数说明: 保存路径、编码方式、播放帧率、大小、默认为True(彩色图)

# 保存视频
import cv2
cap = cv2.VideoCapture(0) # 1.实例化VideoCapture对象

fourcc = cv2.VideoWriter_fourcc('F', 'L', 'V', '1') # 创建编码方式
fps, size = 20.0, (640,480)
Writer = cv2.VideoWriter('output_1.flv', fourcc, 20.0, (640, 480)) # 创建Videowriter对象
while(cap.isOpened()):
    ret, frame = cap.read()
    if ret:
        Writer.write(frame)
        cv2.imshow('frame', frame)  # 边写边看
        if cv2.waitKey(1) & 0xFF==ord('q'):
            break
    else:
        break
        
 Writer.release() # 释放Writer
cap.release() # 释放摄像头
cv2.destroyAllWindows()

2.1 附录:视频格式

在这里插入图片描述

3、修改视频格式

说明:与2相似,只是创建VideoCapture对象时,读入为路径

# 3.修改视频格式
# 修改视频格式
import cv2
cap = cv2.VideoCapture('move_detect.flv')
fourcc = cv2.VideoWriter_fourcc('M', 'J', 'P', 'G')

fps = cap.get(cv2.CAP_PROP_FPS) # 原视频帧率
frame_width = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH)) # 获取视频宽度
frame_height = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT)) # 获取视频高度
print(fps, frame_width, frame_height)

Writer = cv2.VideoWriter('output_1_new.mp4', fourcc, fps, (frame_width, frame_height))
while(True):
    ret, frame = cap.read()
    if ret:
        Writer.write(frame)
        cv2.imshow('frame', frame)
        if cv2.waitKey(1) & 0xff == 27:
            break
    else:
        break
Writer.release()
cap.release()
cv2.destroyAllWindows()

猜你喜欢

转载自blog.csdn.net/weixin_44994302/article/details/121801775