OpenCV_Python官方文档2——视频操作

版权声明:本文为博主原创文章,欢迎转载,但未经作者同意必须保留此段声明,版权所有翻版必究。 https://blog.csdn.net/sinat_38814578/article/details/82954635

OpenCV-Python Tutorials

https://opencv-python-tutroals.readthedocs.io/en/latest/py_tutorials/py_tutorials.html

视频捕获

Capture Video from Camera

主要函数

  1. cv2.VideoCapture()

通过摄像头捕获实时图像数据。共一个参数,参数表示摄像头索引号,0:默认笔记本内置摄像头,或者填写视频名称,直接加载本地视频文件

  1. cap.isOpened()

返回一个布尔值(True / False)。有时,cap 可能没有初始化捕捉器,在这种情况下代码就会出错。该函数用来检查捕捉器是否初始化,如果打开了它会返回 True 。否则用 cap.open() 手动打开。但是一般情况下 cap 没有初始化都是视频文件没有正确传入导致的,在这种情况下请检查文件路径或者摄像头索引是否正确。

  1. ret,frame = cap.read()

返回两个值,ret 存储布尔值,如果视频读取正确,则为 True,如果错误,则为 False,也可用来判断是否到视频结尾;frame 存储每一帧的图像。若使用一个变量来接收两个值,如frame = cap.read(),则 frame 为一个元组,原来使用 frame 处需更改为 frame[1]

  1. cap.get(propid)

获得视频的某些参数。propid 指属性id,可以是 0 到 18 之间的任何整数。每一个数字代表视频的一个属性,其中的一些值可以使用 cap.set(propid,value) 来修改,value 就是你想要设置成的新的值。
例如,可以使用 cap.get(3) 和 cap.get(4) 来查看每一帧的宽和高,默认为 640* 480。如果想把宽和高修改为 320*240,可以使用 cap.set(3,320) 和cap.set(4,240) 。
在这里插入图片描述

  1. cap.release():释放摄像头

创建了一个 VideoCapture 对象来捕获视频,视频源为当前电脑摄像头。

import numpy as np 
import cv2

cap = cv2.VideoCapture(0)
while(cap.isOpened()): #反复读取我们捕获到的视频帧
    ret, frame = cap.read() #从摄像头读取一帧,ret表示视频读取成功与否
    if ret:
        frame = cv2.cvtColor(frame,cv2.COLOR_BGR2GRAY) #对捕捉到的视频帧进行处理
        cv2.imshow('frame',frame) #显示
    else:
        break
        
    #控制视频播放速度
    k = cv2.waitKey(1) & 0xFF #每帧数据延时 1ms,延时不能为 0,否则读取的结果是静态帧
    if  k == ord('s'):  #按s键,打印字符串
        print(cap.get(3));
        print(cap.get(4));
    elif k == ord('q'):  # 按q键退出
        break 

cap.release() #释放摄像头
cv2.destroyAllWindows() #关闭所有窗口

k = cv2.waitKey(1) & 0xFF,该代码的作用为控制视频播放速度。如果这段代码,视频播放速度比它原来的速度快很多,几乎是好几倍的播放速度。因为每一帧都是静止的图象,用while 循环来读取视频帧,快速连续地显示帧便形成了运动的假象。而cv2.waitKey(value)在这里的作用是等待 value 毫秒然后执行下一个循环,也就是每个循环展示一副画面 value 毫秒。注意。这里的 value 跟视频的 fps 不是一个概念,fps是一秒内播放几帧画面,而 value 是显示一幅图 value 毫秒,可以理解为fps = 1000/value。我们可以用 cap.get(5) 获取视频原本的 fps,例如视频的 fps 为 30,那么 value 的值可以取 1000/30 = 33,这样视频的播放速度就与原本的播放速度大致相同了。

注意:标准的帧速率:29.97,23.976 ,14.99;近似30,24,15;

为什么标准的是29.97 ,请参考这里
https://zhidao.baidu.com/question/79941514.html?qbl=relate_question_2&word=��������Ƶ��30֡��

Playing Video from file

和从摄像头中读取视频一样,从文件中读取视频只需要把摄像头索引换成文件名。

cap = cv2.VideoCapture('frame.avi')

Saving a Video

主要函数
  1. cv2.VideoWriter()

保存视频的方式与图片不同,创建一个cv2.VideoWriter的对象,参数依次为视频文件名(如output.avi),视频编码格式(FourCC编码),帧率(fps),视频帧的大小(宽和高),是否彩色。最后一个参数是一个 isColor 标志位,如果它为 true 就输出彩色图像,否则输出灰度图像。

FourCC编码是一个4个字节的编码用来指定视频的视频的编码格式。在Windows平台下主要的视频格式是DIVX,它支持 MPEG-4, H.264 和最新 H.265 标准的视频,分辨率可高达4K超高清。

以XVID 为例:cv2.VideoWriter_fourcc(‘X’,’V’,’I’,’D’) 或者cv2.VideoWriter_fourcc(*’XVID’)传递 FourCC码。

  1. cv2.flip()

该函数用来翻转一帧图像,共两个参数,第一个参数是要翻转的图像,第二个参数是翻转的模式(0代表沿 x 轴翻转,整数(比如1)代表沿 y 轴翻转,负数代表沿两个坐标轴同时翻转)。

  1. outWriter.write()

函数接收一张图片并把它写到指定的位置,这里指定的位置就是创建VideoWriter对象outWriter。

捕捉摄像头视频,将其每一帧沿 x 轴方向翻转,然后保存。

import numpy as np 
import cv2

cap = cv2.VideoCapture(0) #从摄像头获取视频
fourcc = cv2.VideoWriter_fourcc(*'XVID') #视频编码格式
outWriter = cv2.VideoWriter('frame.avi',fourcc,24,(640,480)) #创建VideoWriter对象

while(cap.isOpened()):
    ret, frame = cap.read() 
    if ret:
        frame = cv2.flip(frame,0) #处理得到的帧,沿x轴翻转
        outWriter.write(frame) #保存翻转后的视频帧
        cv2.imshow('frame',frame)
    else:
        break
        
    #控制视频播放速度
    k = cv2.waitKey(1) & 0xFF
    if  k == ord('s'):  #按s键,打印字符串
        print(cap.get(3));
        print(cap.get(4));
    elif k == ord('q'):  # 按q键退出
        break 
        
#释放
cap.release()
outWriter.release()
cv2.destroyAllWindows()

猜你喜欢

转载自blog.csdn.net/sinat_38814578/article/details/82954635
今日推荐