前言

opencv视频处理主要设计了实时摄像头读取视频,本地视频读取并处理两个大的方面,

主要介绍了视频读取及处理的基本操作,内容概述如下:

  • * 摄像头视频读入、本地视频读入
  • * 图像及视频写入保存
  • * 视频流单帧单帧处理
  • * 每一帧视频流的基本属性,如帧率、视频流宽度高度等
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple opencv-python

Requirement already satisfied: opencv-python in /opt/conda/lib/python3.6/site-packages

Requirement already satisfied: numpy>=1.11.3 in /opt/conda/lib/python3.6/site-packages (from opencv-python)

1.读取摄像头实时视频



opencv 关闭变焦 opencv释放摄像头_帧率


# -*- coding: utf-8 -*-# 1.读取视频import cv2 as cv"""cv.VideoCapture(0)@params: 读取摄像头——>设备索引,如0,1,2,...n         读取本地视频——>"D:/video/test.mp4""""cap = cv.VideoCapture(0)# 基本属性fps = cap.get(5)  # 帧率frame_width = cap.get(3)  # 每一帧视频流宽度frame_height = cap.get(4)  # 每一帧视频流高度now_position = cap.get(0)  # 获取当前播放进度位置fourcc = cv.VideoWriter_fourcc(*'XVID')  # 视频编码器print(fps, frame_width, frame_height, now_position)# 创建视频保存对象out = cv.VideoWriter("data/video/test.mp4",  # 保存视频路径 mp4, avi                     -1,  # 视频编码器,为-1可自动匹配                     int(fps),  # 帧率                     (int(frame_width), int(frame_height)))  # 每一帧视频流宽度及高度# 2.逐帧读取视频为图像进行处理num = 1while cap.isOpened():    """cap.read()    @return1:True or False,True 代表读取成功    @return2:视频流的每一帧图像数组值    """    ret, frame = cap.read()    if not ret:        print(">>>视频读取为空,正在退出程序.....")        break    cv.imshow("frame", frame)        """点击视频框,按'q'退出程序, 中止视频流播放    if cv.waitKey(1) == ord('q'):        break    """    if cv.waitKey(1) == ord('q'):        break        """图像保存:保存每一帧视频流的图片    cv.imwrite("data/img/"+ str(num) +".png", frame)    """    cv.imwrite("data/img/"+ str(num) +".png", frame)        """视频保存:    out = cv.VideoWriter("data/video/test.mp4",  # 保存视频路径                     -1,  # 视频编码器,为-1可自动匹配                     int(fps),  # 帧率                     (int(frame_width), int(frame_height)))  # 每一帧视频流宽度及高度    out.write(frame)    """    out.write(frame)    num += 1# 3.完成所有操作后,释放捕获器cap.release()cv.destroyAllWindows()

0.0 0.0 0.0 0.0

2.读取本地视频


opencv 关闭变焦 opencv释放摄像头_释放摄像头_02


# -*- coding: utf-8 -*-# 1.读取视频import cv2 as cv"""cv.VideoCapture(0)@params: 读取摄像头——>设备索引,如0,1,2,...n         读取本地视频——>"D:/video/test.mp4""""cap = cv.VideoCapture("data/video/test.mp4")# 基本属性fps = cap.get(5)  # 帧率frame_width = cap.get(3)  # 每一帧视频流宽度frame_height = cap.get(4)  # 每一帧视频流高度now_position = cap.get(0)  # 获取当前播放进度位置fourcc = cv.VideoWriter_fourcc(*'XVID')  # 视频编码器print(fps, frame_width, frame_height, now_position)# 创建视频保存对象out = cv.VideoWriter("data/video/2_test.mp4",  # 保存视频路径 mp4, avi                     -1,  # 视频编码器,为-1可自动匹配                     int(fps),  # 帧率                     (int(frame_width), int(frame_height)))  # 每一帧视频流宽度及高度# 2.逐帧读取视频为图像进行处理num = 1while cap.isOpened():    """cap.read()    @return1:True or False,True 代表读取成功    @return2:视频流的每一帧图像数组值    """    ret, frame = cap.read()    if not ret:        print(">>>视频读取为空,正在退出程序.....")        break    cv.imshow("frame", frame)        """点击视频框,按'q'退出程序, 中止视频流播放    if cv.waitKey(1) == ord('q'):        break    """    if cv.waitKey(1) == ord('q'):        break        """图像保存:保存每一帧视频流的图片    cv.imwrite("data/img/"+ str(num) +".png", frame)    """    cv.imwrite("data/img/2_"+ str(num) +".png", frame)        """视频保存:    out = cv.VideoWriter("data/video/test.mp4",  # 保存视频路径                     -1,  # 视频编码器,为-1可自动匹配                     int(fps),  # 帧率                     (int(frame_width), int(frame_height)))  # 每一帧视频流宽度及高度    out.write(frame)    """    out.write(frame)    num += 1# 3.完成所有操作后,释放捕获器cap.release()cv.destroyAllWindows()

0.0 0.0 0.0 0.0

参考资料

[1] 视频获取与显示,

[2] 视频流每一帧属性等,