zoukankan      html  css  js  c++  java
  • 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()

  • 相关阅读:
    axios 配置baseURL 报错 Uncaught TypeError: Cannot set properties of undefined (setting 'baseURL')
    VSCode 添加 PHP debug 调试
    docker安装mysql,oracle,redis
    rocketmq入门笔记
    MyEclipse中导入jar包
    jar cvf 方式打包java web项目
    关于web工作流引擎概述
    企业服务总线解决方案剖析
    javaScript中取当前时间Date的前后时间
    json与对象转换的工具集合类
  • 原文地址:https://www.cnblogs.com/miaorn/p/12314912.html
Copyright © 2011-2022 走看看