[笔记] 关于OpenCV-Python 的视频处理笔记

最近在公司疯狂做 Demo,最近需要使用 cv2 里的视频操作,之前一直也没放在心上,借这次机会好好研究一下吧。
此外,吐槽一句,做 Demo 前最好大家统一一下所用的环境。Opencv-Pyhton 2.x 与 3.x 会存在部分属性函数名的修改,到时候 debug 就十分的繁琐。
至于两者的区别,可以看看文章末尾的参考资料。本文所使用的环境为:Python 2.7, Opencv-Python 3.4.0

目录

  1. 获取并展示视频
  2. 保存视频
  3. 常用方法

1. 获取视频

import cv2
# 创建 VideoCapture 实例,通过摄像头获取视频,其中,参数 0 表示使用默认摄像头  
cap = cv2.VideoCapture(0)
# 创建 VideoCapture 实例,通过打开指定视频文件获取视频
# cap = cv2.VideoCapture('out.avi')
# 调用 cap.isOpened() 以确保视频获取成功
while(cap.isOpened()):
	
	ret, frame = cap.read()
	# 展示所获取的视频
	cv2.imshow('frame',frame)
	# 等待键盘输入,若传入参数为 0,则程序将无限制等待用户的案件事件,否则,程序等待所传入参数对应的毫秒时间后,跳出循环。
	if cv2.waitKey(1) & 0xFF == ord('q'):
		break
# 释放获取设备
cap.release()
# 删除所有建立的窗口
cv2.destroyAllWindows()

2. 保存视频

import cv2
cap = cv2.VideoCapture(0)
# 创建 VideoWrite 实例用于保存视频,其中,需要指定输出文件路径,编码形式,播放频率以及帧的Size
# From OpenCV : 
# The constructors/functions initialize video writers. 
# On Linux FFMPEG is used to write videos; on Windows FFMPEG or VFW is used; on MacOSX QTKit is used.
filePath = 'example.avi'
fourcc =  cv2.VideoWriter_fourcc(*'XVID') # 创建 VideoWriter 实例
fps = cap.get(cv2.cv2.CAP_PROP_FPS) # 获取 VideoCapture 的 FPS
frameSize = (cap.get(cv2.CAP_PROP_FRAME_WIDTH),cap.get(cv2.CAP_PROP_FRAME_HEIGTH)) # 获取视频的 VideoCapture 的 Size
out = cv2.VideoWriter(filePath, fourcc, fps, frameSize) 
while(cap.isOpened()):
	ret, frame = cap.read()
	out.write(frame)
cap.release()
# 释放视频写入实例
out.release()
cv2.destroyAllWindows()

3. 常用方法

retval = cv2.VideoCapture.get(propId)   #打开视频文件或者相机设备进行视频捕获。

propId 常见取值如下:(以下为 Opencv-Python 3.x 的格式,在 Opencv-Python 2.x 中,需加上前缀 CV_)
"""
cv2.CAP_PROP_POS_MSEC:     视频文件的当前位置(ms)
cv2.CAP_PROP_POS_FRAMES:   从0开始索引帧,帧位置。
cv2.CAP_PROP_POS_AVI_RATIO:视频文件的相对位置(0表示开始,1表示结束)
cv2.CAP_PROP_FRAME_WIDTH:  视频流的帧宽度。
cv2.CAP_PROP_FRAME_HEIGHT: 视频流的帧高度。
cv2.CAP_PROP_FPS:          帧率
cv2.CAP_PROP_FOURCC:       编解码器四字符代码
cv2.CAP_PROP_FRAME_COUNT:  视频文件的帧数
cv2.CAP_PROP_FORMAT:       retrieve()返回的Mat对象的格式。
cv2.CAP_PROP_MODE:         后端专用的值,指示当前捕获模式

cv2.CAP_PROP_BRIGHTNESS:图像的亮度,仅适用于支持的相机
cv2.CAP_PROP_CONTRAST:  图像对比度,仅适用于相机
cv2.CAP_PROP_SATURATION:图像饱和度,仅适用于相机
cv2.CAP_PROP_HUE:       图像色调,仅适用于相机
cv2.CAP_PROP_GAIN:      图像增益,仅适用于支持的相机
cv2.CAP_PROP_EXPOSURE:    曝光,仅适用于支持的相机
cv2.CAP_PROP_CONVERT_RGB:布尔标志,指示是否应将图像转换为RGB。
"""

# grab, retrieve, read 的关系
# Grabs the next frame from video file or capturing device.
retval = cv2.VideoCapture.grab() 
# Decodes and returns the grabbed video frame.
retval, image = cv2.VideoCapture.retrieve([, image[, flag]]) 
# Grabs, decodes and returns the next video frame.
retval, image = cv2.VideoCapture.read([,image]) 
# 由上可知,read 是 grab 和 retrieve 的结合体。当不需要当前的帧或画面时,可以使用 grab 跳过,以减少 read 所耗费的额外时间。

参考资料:

  • opencv3 与opencv2不同之处
  • OpenCV 3.0与OpenCV 2.4的区别
  • OpenCV视频操作
  • OpenCV+Python 摄像头采集代码
  • Python-OpenCV 处理视频(一)(二): 输入输出 视频处理
  • Python&OpenCV - 读写(read&write)视频(video) 详解及代码
  • OpenCV—Python视频的读取及保存
  • opencv read grab retrieve 关系

如果你看到了这篇文章的最后,并且觉得有帮助的话,麻烦你花几秒钟时间点个赞,或者受累在评论中指出我的错误。谢谢!

作者信息:
知乎:没头脑
LeetCode:Tao Pu
CSDN:Code_Mart
Github:Bojack-want-drink

你可能感兴趣的:(Python,工具库,常用工具速查表)