import cv2 as cv
import numpy as np
capture = cv.VideoCapture("./test.avi")
#capture = cv.VideoCapture(0) 打开摄像头
height = capture.get(cv.CAP_PROP_FRAME_HEIGHT) #获取视频流的帧高度
width = capture.get(cv.CAP_PROP_FRAME_WIDTH) #获取视频流的帧宽度
count = capture.get(cv.CAP_PROP_FRAME_COUNT) #视频文件的帧数
fps = capture.get(cv.CAP_PROP_FPS) #帧率
print(height, width, count, fps)
out = cv.VideoWriter("./test_cp.avi", cv.VideoWriter_fourcc(‘D’, ‘I’, ‘V’, ‘X’), 15,
(np.int(width), np.int(height)), True)
while True:
ret, frame = capture.read()#捕获一帧图像
if ret is True:
cv.imshow(“video-input”, frame)
out.write(frame)
c = cv.waitKey(50)
if c == 27: # ESC
break
else:
break
capture.release()
out.release()
retval = cv2.VideoCapture.get(propId)
功能:得到相机/视频文件的各种属性。propId常见取值如下:
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
对于视频的保存,OpenCV提供了接口VideoWriter。要想编程实现保存视频,需要熟悉一下该类的构造函数和成员函数。
= cv.VideoWriter( filename, fourcc, fps, frameSize[, isColor] )
参数:
filename:给要保存的视频起个名字
fourcc:指定视频编解码器的4字节代码
fps:帧率
frameSize:帧大小
isColor:如果为true,则视频为彩色,否则为灰度视频,默认为true
在此再介绍一下fourcc。它是用于压缩帧的4字符编解码器代码。如VideoWriter :: fourcc(‘P’,‘I’,‘M’,‘1’)是MPEG-1编解码器,VideoWriter :: fourcc(‘M’,‘J’,‘P’,'G ')是一个运动jpeg编解码器等。要想详细了解fourcc,可以百度搜索进行详细的学习。get()、set()、isOpened()、release()等和VideoCapture的成员函数类似,不坐赘述。介绍几个新的成员函数:
retval = cv2.VideoWriter_fourcc( c1, c2, c3, c4 )
创建摄像头对象
cap = cv2.VideoCapture(“videoTest/test1.mp4”) #参数为视频文件目录
逐帧显示实现视频播放
while 1:
ret, frame = cap.read() #读取
cv2.imshow(“capture”, frame) #显示
if cv2.waitKey(100) & 0xff == ord(‘q’): #按q退出
break
释放摄像头对象和窗口
cap.release()
cv2.destroyAllWindows()