文章目录

  • 读取视频流
  • 屏幕插入文本


读取视频流

cv2.getcapture()用法,使用函数 cap.get(propId)来获得视频的一些参数信息。这里 propId 可以是 0 到 18 之间的任何整数。每一个数代表视频的一个属性:

  • cv2.VideoCapture.get(0) 视频文件的当前位置(播放)以毫秒为单位
  • cv2.VideoCapture.get(1) 基于以0开始的被捕获或解码的帧索引
  • cv2.VideoCapture.get(2) 视频文件的相对位置(播放):0=电影开始,1=影片的结尾。
  • cv2.VideoCapture.get(3) 在视频流的帧的宽度
  • cv2.VideoCapture.get(4) 在视频流的帧的高度
  • cv2.VideoCapture.get(5) 帧速率
  • cv2.VideoCapture.get(6) 编解码的4字-字符代码
  • cv2.VideoCapture.get(7) 视频文件中的帧数
  • cv2.VideoCapture.get(8) 返回对象的格式
  • cv2.VideoCapture.get(9) 返回后端特定的值,该值指示当前捕获模式
  • cv2.VideoCapture.get(10) 图像的亮度(仅适用于照相机)
  • cv2.VideoCapture.get(11) 图像的对比度(仅适用于照相机)
  • cv2.VideoCapture.get(12) 图像的饱和度(仅适用于照相机)
  • cv2.VideoCapture.get(13) 色调图像(仅适用于照相机)
  • cv2.VideoCapture.get(14) 图像增益(仅适用于照相机)(Gain在摄影中表示白平衡提升)
  • cv2.VideoCapture.get(15) 曝光(仅适用于照相机)
  • cv2.VideoCapture.get(16) 指示是否应将图像转换为RGB布尔标志
  • cv2.VideoCapture.get(17) × 暂时不支持
  • cv2.VideoCapture.get(18) 立体摄像机的矫正标注(目前只有DC1394 v.2.x后端支持这个功能)
"""capture video from camera"""
import numpy as np
import cv2


# create a VideoCapture object
cap=cv2.VideoCapture(0)

# create a video object
# FourCC是4字节码,确定视频的编码格式
fourcc=cv2.VideoWriter_fourcc(*'DIVX') 

# create a videowriter object 
# element:1>filename 2>specify FourCC encoding 3,4>play frequency and frame 5>isColor label,True is color map  
out=cv2.VideoWriter('output,mp4',fourcc,20.0,(640,480))

while(cap.isOpened()):
    # Capture frame by frame
    ret,frame=cap.read()
    if ret==True:
        # flip image
        frame=cv2.flip(frame,1)
        # write next video frame
        out.write(frame)
        cv2.imshow('frame',frame)

    
        # display the resulting frame
    
        if cv2.waitKey(1) & 0xFF == ord('q'):
            break
    #else:
    #    break
    
# release the capture
cap.release()
out.release()
cv2.destroyAllWindows()

run,你就可以在屏幕中看到自己的样子,是灰度的图像,只有当你在鼠标点击video之后,按键敲入q之后,才能结束当前程序。

屏幕插入文本

"""read video"""
# encoding: utf-8
import cv2

# 声明一个 VideoCapture 对象。他的参数可以是设备的索引号,或者是一个视频文件。
# 设备索引号就是在指定要使用的摄像头。
# 一般的笔记本电脑都有内置摄像头。所以参数就是0。你可以通过设置成 1 或 者其他的来选择别的摄像头。
# 之后,你就可以一帧一帧的捕获视频了。
# 有时cap可能不能成功的初始化摄像头设备。这种情况下上面的代码会报错。你可以使用cap.isOpened(),
# 来检查是否成功初始化了。如果返回值是 True,那就没有问题。否则就要使用函数 cap.open()。
cap = cv2.VideoCapture(0)

# cap.get(propId)
# 你可以使用函数 cap.get(propId)来获得视频的一些参数信息。这里 propId 可以是 0 到 18 之间的任何整数。每一个数代表视频的一个属性
# cap.set(propId,value)
# 其中的一些值可以使用cap.set(propId,value)来修改,value就是你想要设置成的新值。

# 注意:当你的程序报错时,检查是否初始化成功
# cap.isOpened()
# cap.open():如果没有初始化成功,调用打开方法
while (cap.isOpened()):
# while (True):   # Capture(捕获) frame-by-frame
    # cap.read() # 返回两个值,一个布尔值(True/False)一个ndarray值。
    # 如果帧读取的是正确的,就是 True。
    # 所以最后你可以通过检查他的返回值来查看视频文件是否已经到了结尾。

    # ndarray是抓取、解码并返回下一个视频帧
    # <class 'numpy.ndarray'>,抓取不到返回为None
    ret,frame = cap.read()
    # 测试输出
    print(ret)
    print(frame)
    print(type(frame))

    # 在这里进行对每一帧的操作
    gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
    #  Display the resulting frame
    print(gray.shape)

    # 字体设置
    font = cv2.FONT_HERSHEY_SIMPLEX
    img=cv2.putText(gray, 'video', (10, 180), font, 5, (255, 255, 255), 20)
    cv2.imshow('frame',img)
    cv2.waitKey(25)
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break

#  When everything done,release the capture
cap.release()
cv2.destroyAllWindows()

打开摄像头的功能还要读者自己去尝试,这里就不上图。。。函数的使用方法和参数已经大多作了注释,可以先看看。。