目录
- 一. OpenCV 关于视频的基础操作
- 1. cv.VideoCapture ( ) 读取摄像头 / 视频文件
- 2. cv.VideoCapture ( ).set ( ) 设置视频属性
- 3. cv.VideoCapture ( ).get ( ) 打印视频属性
- 4. cv.VideoCapture ( ).read ( ) 读帧
- 5. capture.release ( ) 释放资源
- 6. cv.VideoWriter ( ) 视频写入
一. OpenCV 关于视频的基础操作
1. cv.VideoCapture ( ) 读取摄像头 / 视频文件
cv.VideoCapture ( )参数:参数是0时,默认打开笔记本的内置第一个摄像头参数是视频文件路径时,表示读取对应文件
# 从摄像机获取视频
# 创建一个基于摄像头的视频读取流,给定基于第一个视频设备
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) => 对比度 40capture.set(CV_CAP_PROP_SATURATION, 50) => 饱和度 50capture.set(CV_CAP_PROP_HUE, 50) => 色调 50capture.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后端支持这个功能)
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)
capture =cv.VideoCapture(0)# 设置视频的宽度,高度
success=capture.set(cv.CAP_PROP_FRAME_WIDTH, 1880)
if success: # if成立时,success不等于0print("设置宽度成功") # 设置宽度成功
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格式
# 读取当前时刻的摄像头捕获的1帧图像
success, frame = capture.read()
# 遍历&等待任意键盘输入
# -1表示等待delay后,没有任何键盘输入(对于视频而言几乎没等)
while success and cv.waitKey(1) == -1: # 读取正确 and 1毫秒内无键盘输入 == Truecv.imshow('frame', frame)# 读取下一帧的图像success, frame = capture.read()
5. capture.release ( ) 释放资源
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编码类型,文件名后缀为.avicv2.VideoWriter_fourcc('X','V','I','D'):MPEG-4编码类型,文件名后缀为.avi,可指定结果视频的大小cv2.VideoWriter_fourcc('T','H','E','O'):Ogg Vorbis,文件名后缀为.ogvcv2.VideoWriter_fourcc('F','L','V','1'):Flash视频,文件名后缀为.flv
【注意】
在OpenCV中,写入视频时常需要减去1的原因是:因为视频的帧数是从0开始计数的,而不是从1开始计数的即可以理解为第0帧无内容因此,当要写入10秒时长的视频时,需要计算出总共的帧数,公式为10*fps-1
感谢阅读🌼
如果喜欢这篇文章,记得点赞👍和转发🔄哦!
有任何想法或问题,欢迎留言交流💬,我们下次见!
本文相关代码存放位置
【Opencv2 视频操作】
祝愉快🌟!