博主个人学习笔记^^

opencv-调用视频

调用本地视频文件或者笔记本摄像头

由于调用本地视频文件或者笔记本摄像头其实差不多,接下来将以调用本地视频文件为例。我们需要清楚我们的视频是由一帧一帧的图片组成,因此我们调用视频,首先把视频在哪找出来【如vc = cv2.VideoCapture()】,其次验证是否正确找到视频了【vc.isOpened()】,之后,需要把视频拆解成一帧一帧的图片【函数:参数.read() 】,最后,通过循环函数【while】,将一帧一帧的图片进行显示【cv2.imshow()】,只要显示速度够快,那么由于人眼的视觉残留,我们看到的就是视频。显示完视频后,我们需要释放电脑的空间【参数.release()】,以及需要具备自动关闭窗口的操作【if条件语句下满足,break跳出循环】,另外,如果我们中途需要停止视频的显示实现窗口的延时或暂停【waitKey()】。关闭窗口【cv2.destroyAllWindows()】

1.函数介绍

我们现在明确上面用到的函数的用法(主要是搞明白调用的参数、函数的返回值)在调用

  • cv2.VideoCapture(): 调用的参数是0或者视频文件路径(0为调用笔记本摄像头),该函数的返回值有一个,自己可以定义一个名字代表调用的视频
  • vc.isOpened() : 不需要调用什么参数,vc是前面调用的视频定义一个名字,代表验证视频是否正常调用,正常就返回True,不正常就是返回False
  • vc.read() : vc.read()按帧读取视频,需要定义两个参数将该函数的返回值赋值给两个参数,ret,frame是获vc.read()方法的两个返回值。其中ret是布尔值,如果读取帧是正确的则返回True,如果文件读取到结尾,它的返回值就为False。frame就是每一帧的图像,是个三维矩阵,没有图像之后返回None。
  • cv2.imshow() : 输入两个参数,第一个参数是定义显示窗口的name,第二个参数是调用视频前面被定义的名字,不需要赋值操作,结果是弹出一个显示窗口,用来显示图片或者是高帧率形成的视频。
  • waitKey() : cv2.waitKey(1),waitKey()方法本身表示等待键盘输入,

参数是1,表示延时1ms切换到下一帧图像,对于视频而言;

参数为0,如cv2.waitKey(0)只显示当前帧图像,相当于视频暂停,;(最常用的形式)

参数过大如cv2.waitKey(1000),会因为延时过久而卡顿感觉到卡顿。

  • cv2.destroyAllWindows():关闭窗口

2.思维导图

java opencv 打开直播流 opencv打开视频_关闭窗口

3.本地视频文件调取代码区

# -*- coding =utf-8 -*-
# @Time :2021/11/11 22:15
# @Author :T.Liang
# @File :Video.py
# @Software :PyCharm

import cv2

vc = cv2.VideoCapture(r"C:\Users\T.Liang\Desktop\Image manipulation\test.mp4")  # 调取本地视频文件
# vc = cv2.VideoCapture(0)   # 调取笔记本的摄像头(和前面的情况二选一即可)

# 判断视频是否正常读取
if vc.isOpened():
    success, frames = vc.read()
else:
    success = False
# 通过循环语句实现图片转变为视频
while success:
    ret, frames = vc.read()
    # 实现视频播放结束,暂停后自动关闭窗口
    if frames is None:  # 判断是否返回None,用“is”
        break
    # 实现视频播放过程中,暂停并自动关闭窗口
    if ret is True:
        cv2.imshow('frames', frames)
        if cv2.waitKey(10) & 0xFF == 27:
# (1)cv2.waitKey(10)括号中数字的单位为ms,(2)0xFF == 27 [Esc的ASCII码为27,即判断是否按下esc键].自定义键位暂停:0xFF == ord('q')
            break
vc.release()
cv2.destroyAllWindows()

4.摄像头显示的窗口画面参数调整

函数vc.set() 可实现对摄像头显示的窗口画面参数调整,输入的参数有两个,第一个是序号(下面表格序号代表的参数),第二个是参数调整为的具体数值 ,比如调整摄像头的亮度 : vc.set(10,100),宽度:vc.set(3,640),高度:vc.set(4,480)

java opencv 打开直播流 opencv打开视频_ide_02

更多具体参数可查看OpenCV读取、保存视频

5.笔记本摄像头调取代码区(主要区别在12-15行)

# -*- coding =utf-8 -*-
# @Time :2021/11/11 22:15
# @Author :T.Liang
# @File :Video.py
# @Software :PyCharm

import cv2

# vc = cv2.VideoCapture(r"C:\Users\T.Liang\Desktop\Image manipulation\test.mp4")  # 调取本地视频文件
vc = cv2.VideoCapture(0)   # 调取笔记本的摄像头(和前面的情况二选一即可)

# 调取了笔记本摄像头后,可进行摄像头显示的操作,比如显示窗口的宽度、高度、以及亮度等
vc.set(3, 640)   # 调整摄像头显示窗口的宽度,参数3代表宽度,后面的数值为参数设置的具体数值
vc.set(4, 480)   # 调整摄像头显示窗口的高度,参数4代表高度,后面的数值为参数设置的具体数值
vc.set(10, 100)  # 调整摄像头显示窗口的亮度,参数10代表亮度,后面的数值为参数设置的具体数值

# 判断视频是否正常读取
if vc.isOpened():
    success, frames = vc.read()
else:
    success = False
# 通过循环语句实现图片转变为视频
while success:
    ret, frames = vc.read()
    # 实现视频播放结束,暂停后自动关闭窗口
    if frames is None:  # 判断是否返回None,用“is”
        break
    # 实现视频播放过程中,暂停并自动关闭窗口
    if ret is True:
        cv2.imshow('frames', frames)
        if cv2.waitKey(10) & 0xFF == 27:
# (1)cv2.waitKey(10)括号中数字的单位为ms,(2)0xFF == 27 [Esc的ASCII码为27,即判断是否按下esc键].自定义键位暂停:0xFF == ord('q')
            break
vc.release()
cv2.destroyAllWindows()