目录
- [一. OpenCV 关于视频的基础操作](#一. OpenCV 关于视频的基础操作)
-
- [1. cv.VideoCapture ( ) 读取摄像头 / 视频文件](#1. cv.VideoCapture ( ) 读取摄像头 / 视频文件)
- [2. cv.VideoCapture ( ).set ( ) 设置视频属性](#2. cv.VideoCapture ( ).set ( ) 设置视频属性)
- [3. cv.VideoCapture ( ).get ( ) 打印视频属性](#3. cv.VideoCapture ( ).get ( ) 打印视频属性)
- [4. cv.VideoCapture ( ).read ( ) 读帧](#4. cv.VideoCapture ( ).read ( ) 读帧)
- [5. capture.release ( ) 释放资源](#5. capture.release ( ) 释放资源)
- [6. cv.VideoWriter ( ) 视频写入](#6. cv.VideoWriter ( ) 视频写入)
一. OpenCV 关于视频的基础操作
1. cv.VideoCapture ( ) 读取摄像头 / 视频文件
cv.VideoCapture ( )
参数:
参数是0时,默认打开笔记本的内置第一个摄像头
参数是视频文件路径时,表示读取对应文件
python
# 从摄像机获取视频
# 创建一个基于摄像头的视频读取流,给定基于第一个视频设备
capture =cv.VideoCapture(0)
# 视频文件读入
# 创建一个基于文件的视频读取流,给定基于第一个视频设备
capture = cv.VideoCapture("video1.avi")
2. cv.VideoCapture ( ).set ( ) 设置视频属性
cv.VideoCapture().set( )
注意:
实际参数会发生稍微的偏移
作用:
设置视频的宽度,高度,帧率,亮度,对比度等属性
参数影响:
这些属性可以影响视频处理的质量和速度
参数设置:
capture.set(CV_CAP_PROP_FRAME_WIDTH, 1080) => 宽度
capture.set(CV_CAP_PROP_FRAME_HEIGHT, 960) => 高度
capture.set(CV_CAP_PROP_FPS, 30) => 帧率 帧
capture.set(CV_CAP_PROP_BRIGHTNESS, 1) => 亮度
capture.set(CV_CAP_PROP_CONTRAST,40) => 对比度 40
capture.set(CV_CAP_PROP_SATURATION, 50) => 饱和度 50
capture.set(CV_CAP_PROP_HUE, 50) => 色调 50
capture.set(CV_CAP_PROP_EXPOSURE, 50) => 曝光 50 获取摄像头参数
3. cv.VideoCapture ( ).get ( ) 打印视频属性
参数:
cv.VideoCapture.get(0) / cv.CAP_PROP_POS_MSEC 视频文件的当前位置(播放)以毫秒为单位
cv.VideoCapture.get(1) / cv.CAP_PROP_POS_FRAMES 基于以0开始的被捕获或解码的帧索引
cv.VideoCapture.get(2) / cv.CAP_PROP_POS_AVI_RATIO 视频文件的相对位置(播放):0=电影开始,1=影片的结尾
cv.VideoCapture.get(3) / cv.CAP_PROP_FRAME_WIDT 视频流的帧的宽度
cv.VideoCapture.get(4) / cv.CAP_PROP_FRAME_HEIGHT 视频流的帧的高度
cv.VideoCapture.get(5) / cv.CAP_PROP_FPS 帧速率
cv.VideoCapture.get(6) / cv.CAP_PROP_FOURCC 编解码的4字-字符代码
cv.VideoCapture.get(7) / cv.CAP_PROP_FRAME_COUNT 视频文件中的帧数
cv.VideoCapture.get(8) / cv.CAP_PROP_FORMAT 返回对象的格式
cv.VideoCapture.get(9) / cv.CAP_PROP_MODE 返回后端特定的值,该值指示当前捕获模式
cv.VideoCapture.get(10) / cv.CAP_PROP_BRIGHTNESS 图像的亮度(仅适用于照相机)
cv.VideoCapture.get(11) / cv.CAP_PROP_CONTRAST 图像的对比度(仅适用于照相机)
cv.VideoCapture.get(12) / cv.CAP_PROP_SATURATION 图像的饱和度(仅适用于照相机)
cv.VideoCapture.get(13) / cv.CAP_PROP_HUE 色调图像(仅适用于照相机)
cv.VideoCapture.get(14) / cv.CAP_PROP_GAIN 图像增益(仅适用于照相机)(Gain在摄影中表示白平衡提升)
cv.VideoCapture.get(15) / cv.CAP_PROP_EXPOSURE 曝光(仅适用于照相机)
cv.VideoCapture.get(16) / cv.CAP_PROP_CONVERT_RGB 指示是否应将图像转换为RGB布尔标志
cv.VideoCapture.get(17) / cv.CAP_PROP_WHITE_BALANCE × 暂时不支持|
cv.VideoCapture.get(18) / cv.CAP_PROP_RECTIFICATION 立体摄像机的矫正标注(目前只有DC1394 v.2.x后端支持这个功能)
python
capture =cv.VideoCapture(0)
# 未设置视频的宽度,高度
size = (int(capture.get(cv.CAP_PROP_FRAME_WIDTH)),
int(capture.get(cv.CAP_PROP_FRAME_HEIGHT)))
print(size) # (640, 480)
python
capture =cv.VideoCapture(0)
# 设置视频的宽度,高度
success=capture.set(cv.CAP_PROP_FRAME_WIDTH, 1880)
if success: # if成立时,success不等于0
print("设置宽度成功") # 设置宽度成功
success=capture.set(cv.CAP_PROP_FRAME_HEIGHT, 1480)
if success:
print("设置高度成功") # 设置长度成功
# 打印属性
size = (int(capture.get(cv.CAP_PROP_FRAME_WIDTH)),
int(capture.get(cv.CAP_PROP_FRAME_HEIGHT)))
print(size) # (1280, 720)
4. cv.VideoCapture ( ).read ( ) 读帧
cv.VideoCapture ( ).read ( )
作用:
从视频流中读取1帧图像
【注意】按帧读取视频
返回值:
第一个返回值是布尔型:
读取正确,则返回True,
读取失败或读取视频结尾,则会返回False
第二个返回值是每一帧的图像:
这里图像是三维矩阵,读取的图像为BGR格式
python
# 读取当前时刻的摄像头捕获的1帧图像
success, frame = capture.read()
# 遍历&等待任意键盘输入
# -1表示等待delay后,没有任何键盘输入(对于视频而言几乎没等)
while success and cv.waitKey(1) == -1: # 读取正确 and 1毫秒内无键盘输入 == True
cv.imshow('frame', frame)
# 读取下一帧的图像
success, frame = capture.read()
5. capture.release ( ) 释放资源
python
capture.release()
cv.destroyAllWindows()
6. cv.VideoWriter ( ) 视频写入
video_writer = cv.VideoWriter(filename, fourcc, fps, frameSize[, isColor])
作用:
创建一个视频输出对象,即将读取的图像写入指定路径下的文件中
参数:
filename:第一个参数是要保存的文件的路径
fource:指定编码器
fps:要保存的视频的帧率
frameSize:要保存的文件的画面尺寸
isColor:指示是黑白画面还是彩色的画面
video_writer.write(frame)
作用:
将读取到的图像写入video_writer中
其中,fource可选择模式 :
cv2.VideoWriter_fourcc('M','P','4','V'):MPEG-4编码 .mp4 可指定结果视频的大小
cv2.VideoWriter_fourcc('X','2','6','4'):MPEG-4编码 .mp4 可指定结果视频的大小
cv2.VideoWriter_fourcc('I','4','2','0'):YUV编码类型,文件名后缀为.avi 广泛兼容,但会产生大文件
cv2.VideoWriter_fourcc('P','I','M','I'):MPEG-1编码类型,文件名后缀为.avi
cv2.VideoWriter_fourcc('X','V','I','D'):MPEG-4编码类型,文件名后缀为.avi,可指定结果视频的大小
cv2.VideoWriter_fourcc('T','H','E','O'):Ogg Vorbis,文件名后缀为.ogv
cv2.VideoWriter_fourcc('F','L','V','1'):Flash视频,文件名后缀为.flv
【注意】
在OpenCV中,写入视频时常需要减去1的原因是:
因为视频的帧数是从0开始计数的,而不是从1开始计数的
即可以理解为第0帧无内容
因此,当要写入10秒时长的视频时,需要计算出总共的帧数,公式为10*fps-1
感谢阅读🌼
如果喜欢这篇文章,记得点赞👍和转发🔄哦!
有任何想法或问题,欢迎留言交流💬,我们下次见!
本文相关代码存放位置
祝愉快🌟!