视频信号时由一系列的图像构成的,这些图像称为帧,播放帧的速度称为帧速率,通常使用帧/秒表示,
即FPS(Frames Per Second),每秒出现的帧数
OpenCv提供cv2.VideoCapture()类来处理视频,
函数形式
捕获对象 = cv2.VideoCapture("摄像头ID号或者视频文件")
摄像头ID号,是摄像头的ID编号,若为-1则随即选取一个摄像头,若由多个摄像头则可以用数字“0“或者”1“、
捕获对象为cv2.VideoCapture()类的对象
函数 retval = cv2.VideoCapture.isOpened()
该函数判断当前摄像头是否初始化成功
retval即是布尔值表示是否初始化成功
若摄像头初始化失败可用函数打开
retval = cv2.VideoCapture.open(index)
index为摄像头的ID号 ,
retval为布尔值,表示是否成功
若在处理视频文件,则语法格式为
retval = cv2.VideoCapture.open(filename)
初始化成功后,捕获帧的函数
retval , image = cv2.VideoCapture.read()
image为捕获到的帧
retval 布尔值表示是否捕获成功
释放,在不需要摄像头时,要关闭摄像头,
None = cv2.VideoCapture.release()
属性设置
如果需要获取类对象的属性,或是更改类对象的属性,
函数 retval = cv2.VideoCapture.get(propId),
propId对象类对象的属性,
如果设置对象属性则
retval = cv2.VideoCapture.set( peopId , value)
value 对应属性propId的值
propId | 含义及值 |
---|---|
cv2.VideoCapture.get(0) | CV_CAP_PROP_POS_MSEC 视频文件的当前位置(播放)以毫秒为单位 |
cv2.VideoCapture.get(1) | CV_CAP_PROP_POS_FRAMES 基于以0开始的被捕获或解码的帧索引 |
cv2.VideoCapture.get(2) | CV_CAP_PROP_POS_AVI_RATIO 视频文件的相对位置(播放):0=视频开始,1=视频的结尾。 |
cv2.VideoCapture.get(3) | CV_CAP_PROP_FRAME_WIDTH 在视频流的帧的宽度 |
cv2.VideoCapture.get(4) | CV_CAP_PROP_FRAME_HEIGHT 在视频流的帧的高度 |
cv2.VideoCapture.get(5) | CV_CAP_PROP_FPS 帧速率 |
cv2.VideoCapture.get(6) | CV_CAP_PROP_FOURCC 编解码的4字-字符代码 |
cv2.VideoCapture.get(7) | CV_CAP_PROP_FRAME_COUNT 视频文件中的帧数 |
cv2.VideoCapture.get(8) | CV_CAP_PROP_FORMAT 返回对象的格式(返回的Mat格式的对象) |
cv2.VideoCapture.get(9) | CV_CAP_PROP_MODE 返回后端特定的值,该值指示当前捕获模式 |
cv2.VideoCapture.get(10) | CV_CAP_PROP_BRIGHTNESS 图像的亮度(仅适用于照相机) |
cv2.VideoCapture.get(11) | CV_CAP_PROP_CONTRAST 图像的对比度(仅适用于照相机) |
cv2.VideoCapture.get(12) | CV_CAP_PROP_SATURATION 图像的饱和度(仅适用于照相机) |
cv2.VideoCapture.get(13) | CV_CAP_PROP_HUE 色调图像(仅适用于照相机) |
cv2.VideoCapture.get(14) | CV_CAP_PROP_GAIN 图像增益(仅适用于照相机)(Gain在摄影中表示白平衡提升) |
cv2.VideoCapture.get(15) | CV_CAP_PROP_EXPOSURE 曝光(仅适用于照相机) |
cv2.VideoCapture.get(16) | CV_CAP_PROP_CONVERT_RGB 指示是否应将图像转换为RGB布尔标志 |
cv2.VideoCapture.get(17) | CV_CAP_PROP_WHITE_BALANCE × 暂时不支持 |
cv2.VideoCapture.get(18) | CV_CAP_PROP_RECTIFICATION 立体摄像机的矫正标注(目前只有DC1394 v.2.x后端支持这个功能) |
还有一些未列出请自行查阅
1 import cv2 2 import numpy as np 3 cap = cv2.VideoCapture(1) 4 while(cap.isOpened()): 5 ret , frame = cap.read() 6 cv2.imshow('frame',frame) 7 c = cv2.waitKey(1) 8 if c == 27: 9 break 10 cap.release()
这里截取了一张图像
OpenCv中的cv2.VideoWriter类可以将图片序列保存成视频文件,也可以修改视频的各种属性,
函数形式
<VIdeoWriter object> = cv2.VideoWriter( filename , fourcc , fps , framsize [, isColor])
filename指定输出目标视频的存放路径和文件名,如果已经存在,则会覆盖
fourcc表示视频编/解码类型, 使用函数cv2.VIdeoWriter_fourcc()来指定视频编码格式,有4个字符参数,
每一个编/解码器都有这样的标记,列出几个常用的
注意:字符顺序不能弄混
#cv2.VideoWriter_fourcc('I', '4', '2', '0'),该参数表示未压缩的YUV颜色编码格式,色度子采样为4:2:0.
该编码格式具有较好的兼容性,但产生文件较大,文件名后缀为.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
也可以用如下表示
fourcc = cv2.VideoWriter_fourcc(*'I420')
fps帧速率
framsize每一帧的长和宽
isColor表示是否为彩色图像
如有
out = cv2.VideoWriter( 'output.avi' , fourcc , 20 , ( 1024 , 768))
None = cv2.VideoWriter(frame)
用于写入下一帧视频,通常情况下要求写入的图像格式为BGR格式,
如上式中 cv2.VideoWriter类 out
out.write(frame) , 存入名为output.avi
释放
None = cv2.VideoWriter.release()
out.release()
1 import cv2 2 import numpy as np 3 cap = cv2.VideoCapture(0) 4 fourcc = cv2.VideoWriter_fourcc(*'I420') 5 out = cv2.VideoWriter('output.avi',fourcc,20,(640,480)) 6 while(cap.isOpened()): 7 ret , frame = cap.read() 8 cv2.imshow('frame',frame) 9 if ret == True : 10 out.write(frame) 11 cv2.imshow('frame',frame) 12 if cv2.waitKey(1) == 27: 13 break 14 else: 15 break 16 cap.release() 17 out.release() 18 cv2.destroyAllWindows()
视频操作基础
1 import cv2 2 import numpy as np 3 cap = cv2.VideoCapture(0) 4 while(cap.isOpened()): 5 ret , frame = cap.read() 6 frame = cv2.Canny(frame , 100 , 200 ) 7 cv2.imshow('frame' , frame) 8 c = cv2.waitKey(1) 9 if c == 27: 10 break 11 cap.release() 12 cv2.destroyAllWindows()