• OpenCV笔记整理【视频处理】


    视频信号由一系列图像组成(帧),帧是以固定的时间间隔从视频中获取的,获取播放帧的速度被称为(帧速率),单位用 “帧/秒” 表示,代表一秒钟取图像的图像数量,英文为“FramePerSecord”,也就是FPS。

    1. VideoCapture类:

    此类下面常用的函数包括:初始化、打开、帧捕获、释放、属性设置等。

    1. 初始化:
      捕获对象 = cv2.VideoCapture(index) 如果index传入0则表示初始化第1个摄像头,传入1则表示初始化第2个摄像头,传入-1表示随机。
      捕获对象 = cv2.VideoCapture(filename) 直接传入视频文件的路径即可。

    2. 打开:
      返回状态 = cv2.VideoCapture.Open(index或filename) 当摄像头或者视频文件被成功打开返回true
      返回状态 = cv2.VideoCapture.isOpened() 判断当前初始化是否成功,返回true或者false。

    3. 帧捕获:
      returnValue,Image = cv2.VideoCapture.read()
      returnValue表示捕获状态,成功为true,失败为false。
      Image表示捕获到的帧图像,如果没有捕获到返回空。

    4. 释放:
      在不用摄像头时,需要将其对象释放,这一定很重要!!!
      cv2.VideoCapture.release()

    5. 属性获取 / 设置:
      returnValue = cv2.VideoCapture.get(propID) 获取视频属性
      returnValue = cv2.VideoCapture.set(propID,value) 设置视频属性值

    关于propID可以直接传入对应的index,也可以直接写属性值

    在这里插入图片描述
    上代码:

    import cv2
    
    capture = cv2.VideoCapture(0) # 初始化笔记本内置摄像头
    while (capture.isOpened()): # 判断是否可用
        retval, image = capture.read() # 实时读取视频从摄像头
        cv2.imshow("Video", image) # 在窗口中显示读取到的视频
        key = cv2.waitKey(1) # 窗口的图像刷新时间为1毫秒
        if key == 32: # 如果按下空格键
            break
    print(capture.get(cv2.CAP_PROP_FRAME_WIDTH)) # 获取视频的行分辨率
    print(capture.get(cv2.CAP_PROP_FRAME_HEIGHT)) # 获取视频的列分辨率
    
    capture.release() # 关闭笔记本内置摄像头
    cv2.destroyAllWindows() # 销毁显示摄像头视频的窗口
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    运行:
    在这里插入图片描述

    2. VideoWriter类:

    此类可以实现保存视频、修改视频、转换视频类型等。。。
    obj = cv2.VideoWriter(fileName,fourcc,fps,frameSize)

    • fileName :保存视频的路径。

    • fourcc:用四个字符表示的编码格式。
      使用 cv2.VideoWriter_fourcc() 指定视频格式。在这里插入图片描述

    • fps:帧速率。

    • frameSize:每一帧的大小。

    上代码【1】:保存一段摄像头录制的视频到文件。

    import cv2
    
    capture = cv2.VideoCapture(0, cv2.CAP_DSHOW) # 初始化默认摄像头
    fourcc = cv2.VideoWriter_fourcc('X', 'V', 'I', 'D') # 确定视频被保存后的编码格式
    output = cv2.VideoWriter("output.avi", fourcc, 30, (640, 480)) # 创建VideoWriter类对象
    while (capture.isOpened()): # 判断是否可以用
        retval, frame = capture.read() # 从摄像头中实时读取视频
        if retval == True: # 如果图像不为空
            output.write(frame) # 将当前一帧图像写入
            cv2.imshow("frame", frame) # 在窗口中显示摄像头视频
        key = cv2.waitKey(1) # 窗口的图像刷新时间为1毫秒
        if key == 27: # 如果按下Esc键
            break
    capture.release() # 关闭默认摄像头
    output.release() # 释放VideoWriter类对象
    cv2.destroyAllWindows() # 销毁显示摄像头视频的窗口
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    运行:
    在这里插入图片描述

    上代码【2】:将视频文件进行Canny处理并显示

    import numpy as np
    import cv2
    
    cap = cv2.VideoCapture('viptrain.avi') # 初始化
    cap.set(5,10) # 设置视频帧速为10
    while(cap.isOpened()):
        ret, frame = cap.read()
        cv2.imshow('Original',frame)
        frame=cv2.Canny(frame,100,200)
        cv2.imshow('Canny',frame)
        c = cv2.waitKey(1)
        if c==27:   #ESC键
            break
    cap.release()
    cv2.destroyAllWindows()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    运行:
    在这里插入图片描述
    拜了个拜,走过路过点个关注,谢谢。。。

  • 相关阅读:
    LeetCode - 解题笔记 - 216 - Combination Sum III
    驱动开发:应用DeviceIoContro模板精讲
    java计算机毕业设计虚拟物品交易网站源码+系统+数据库+lw文档
    迭代合成中小量液体样品静态法饱和蒸气压高精度自动测量解决方案
    LOAM框架后端优化总结
    6 种方式读取 Springboot 的配置,老鸟都这么玩(原理+实战)
    SSH 工具 PuTTY 最新官方下载地址及教程
    9.14 c++基础
    springboot视图渲染技术
    习题 --- 双指针算法、离散化
  • 原文地址:https://blog.csdn.net/qq_34699535/article/details/126193645