一、实例代码
# coding:utf-8
import cv2
import sys
cap = cv2.VideoCapture(0) # 0号摄像头,也可以1、2,lsusb查看
# 使用函数 cap.get(propId) 来获得视频的一些参数信息
fps = cap.get(cv2.cv.CV_CAP_PROP_FPS) # 获得码率
size = (int(cap.get(cv2.cv.CV_CAP_PROP_FRAME_WIDTH)), # 获得尺寸
int(cap.get(cv2.cv.CV_CAP_PROP_FRAME_HEIGHT)))
# 使用cap.set(propId, value)设置视频的一些参数信息
cap.set(3,640)
cap.set(4,480)
cap.set(1, 10.0)
fourcc = cv2.VideoWriter_fourcc('M', 'J', 'P', 'G') # 设置要保存视频的格式。
out = cv2.VideoWriter('output2.avi', fourcc,10,(640,480)) # 设置输出视频的名称,视频的格式,视频的帧速,视频的大小等。
# 第三个参数则镜头快慢的,10为正常,小于10为慢镜头
while(cap.isOpened()): #若初始化摄像头或者打开视频文件成功,isOpened()返回值是True,则表明成功,否则返回值是False
ret,frame = cap.read()
if ret == True:
frame = cv2.flip(frame, 1) # 函数flip可以实现图像的垂直、水平以及同时垂直水平变换
# 第一个参数表示要旋转的视频,第二个参数表示旋转的方向
# 等于0表示绕x轴旋转,大于0的数表示绕y轴旋转,小于0的负数表示绕x和y轴旋转。
a = out.write(frame) # 将摄像头内容写入视频文件
cv2.imshow("frame", frame) # 显示摄像头当前帧内容
if cv2.waitKey(1) & 0xFF == ord('q'): # ord() 将ASCLL码值转换为字符
break
else:
break
cap.release()
out.release()
cv2.destroyAllWindows()
二、一些补充
在上述代码中,已经对内容进行了详细的注释,仔细阅读应该可以轻松掌握。在此处只对一些属性方法做一些备注,以备使用时查询。
1、VideoWriter类中支持的视频格式
# OpenCV提供的格式是未经过压缩的,目前支持的格式如下:
CV_FOURCC('P', 'I', 'M', '1') = MPEG-1 codec
CV_FOURCC('M', 'J', 'P', 'G') = motion-jpeg codec
CV_FOURCC('M', 'P', '4', '2') = MPEG-4.2 codec
CV_FOURCC('D', 'I', 'V', '3') = MPEG-4.3 codec
CV_FOURCC('D', 'I', 'V', 'X') = MPEG-4 codec
CV_FOURCC('U', '2', '6', '3') = H263 codec
CV_FOURCC('I', '2', '6', '3') = H263I codec
CV_FOURCC('F', 'L', 'V', '1') = FLV1 codec
# 视频格式包括:
# I420(适合处理大文件) -> .avi;
# PIMI -> .avi;
# MJPG -> .avi & .mp4
# THEO -> .ogv;
# FLV1(flash video, 流媒体视频) -> .flv
2、获取视频的参数信息
使用函数 cap.get(propId) 来获得视频的一些参数信息,使用cap.set(propId, value)设置视频的一些参数信息,propId的值从0到18分别为:
CV_CAP_PROP_POS_MSEC Current position of the video file in milliseconds or video capture timestamp.
CV_CAP_PROP_POS_FRAMES 0-based index of the frame to be decoded/captured next.
CV_CAP_PROP_POS_AVI_RATIO Relative position of the video file: 0 - start of the film, 1 - end of the film.
CV_CAP_PROP_FRAME_WIDTH 视频每一帧的宽。
CV_CAP_PROP_FRAME_HEIGHT 视频每一帧的高。
CV_CAP_PROP_FPS 视频的帧速。
CV_CAP_PROP_FOURCC 4个字符表示的视频编码器格式。
CV_CAP_PROP_FRAME_COUNT 视频的帧数。
CV_CAP_PROP_FORMAT Format of the Mat objects returned byretrieve().
CV_CAP_PROP_MODE Backend-specific value indicating the current capture mode.
CV_CAP_PROP_BRIGHTNESS Brightness of the image (only for cameras).
CV_CAP_PROP_CONTRAST Contrast of the image (only for cameras).
CV_CAP_PROP_SATURATION Saturation of the image (only for cameras).
CV_CAP_PROP_HUE Hue of the image (only for cameras).
CV_CAP_PROP_GAIN Gain of the image (only for cameras).
CV_CAP_PROP_EXPOSURE Exposure (only for cameras).
CV_CAP_PROP_CONVERT_RGB Boolean flags indicating whether images should be converted to RGB.
CV_CAP_PROP_WHITE_BALANCE Currently not supported
CV_CAP_PROP_RECTIFICATION Rectification flag for stereo cameras (note: only supported by DC1394 v 2.x backend currently)