五、计算机视觉-视频流的读取与操作

文章目录

  • 前言
  • 一、视频是什么?
  • 二、读取视频


前言

当我们谈论计算机视觉时,我们常常会涉及到处理图像和处理视频两个不同的领域。在上一节课中,我们学习了如何处理静态图像,即一张张静止的图像。而在本节课中,我们将探讨如何处理视频。


一、视频是什么?

当我在一本空白的书上绘制了一系列连续的图画时,快速翻动这本书会产生动画的效果。视频也是类似的,你可以把视频想象成一个包含许多图片的文件,其中每张图片都被称为一帧。因此,视频实际上是由连续的图像帧组成的数字序列。

二、读取视频

OpenCV 提供了 函数,用于从摄像头、视频文件或网络摄像头中获取视频流。通过传递设备索引或视频文件的路径作为参数,可以创建一个 VideoCapture 对象。
我们在前面第一个程序中使用到了视频流的读取,当时我们是读取的摄像头。我们看下具体如何使用VideoCapture

代码如下(示例):

# 从视频文件读取
video_file_path = "video.mp4"  # 视频文件路径
cap = cv2.VideoCapture(video_file_path)

# 从摄像头读取
# cap = cv2.VideoCapture(0)  # 0 表示默认摄像头,如果有多个摄像头,可以使用不同的索引值来选择

返回的是VideoCapture 对象,我们还需要调用read读取

ret, frame = cap.read()

这样就读取了视频的具体内容,其实我们上面的代码 读取的是视频的第一帧 ,每次调用read就会读取一帧,所以实际使用我们可以循环读取

# 逐帧读取视频
while True:
    # 读取一帧
    ret, frame = cap.read()
    
    # 检查是否成功读取帧
    if not ret:
        print("无法读取视频帧")
        break

    # 在这里对帧进行处理,例如显示、保存、处理等

    # 显示帧
    cv2.imshow("Frame", frame)

    # 按下 'q' 键退出循环
    if cv2.waitKey(25) & 0xFF == ord('q'):
        break

这样我们可以对frame进行处理,相当于对视频的每一张图片进行处理 从而达到对视频的处理。;例如我们可以翻转视频

 # 反转
    flip_frame = cv2.flip(frame, -1)  # 水平和垂直翻转

或者像我们前面写的demo,读取视像头后,可以对视频中的手部进行识别跟踪。
处理完可以通过imshow去展示我们修改后的结果。

 if cv2.waitKey(25) & 0xFF == ord('q'):
        break

上面的waitkey()函数的作用是等待用户按键输入,最多等待 25 毫秒。如果在等待时间内有按键按下,则返回按键的 ASCII 值,因为waitKey是在循环内部的,所以这行代码 作用就是没读取一帧就等待25毫米 并且检测有没有按键输入,如果有按键输入并且为q 则break。

退出循环后注意要释放一下资源

# 释放资源
cap.release()
cv2.desoyAllWindows()

至此我们视频读取与操作的基础已经说完了。


你可能感兴趣的:(计算机视觉,人工智能,计算机视觉,opencv,人工智能)