opencv之视频处理

视频信号时由一系列的图像构成的,这些图像称为帧,播放帧的速度称为帧速率,通常使用帧/秒表示,

即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()

猜你喜欢

转载自www.cnblogs.com/miaorn/p/12314912.html