OpenCV基础:视频的采集、读取与录制

从摄像头采集视频

相关接口 - VideoCapture

VideoCapture 用于从视频文件、摄像头或其他视频流设备中读取视频帧。它可以捕捉来自多种源的视频。

主要参数:

cv2.VideoCapture(source):

source: 这是一个整数或字符串,表示视频的来源。

  • 如果是整数(如0、1等),表示打开对应的摄像头(0通常是默认摄像头)。
  • 如果是字符串,表示视频文件的路径,或者RTSP流、HTTP流等视频流地址。

常用方法:

cap.read():

  • 返回两个值:ret(布尔值,表示是否成功读取)和 frame(当前帧图像)。

cap.set(prop_id, value):

  • 设置视频捕获设备的属性。prop_id是属性标识符,value是设置的值。

常见的 prop_id 参数:

  • cv2.CAP_PROP_FPS:帧率(每秒帧数)。
  • cv2.CAP_PROP_FRAME_WIDTH:视频宽度。
  • cv2.CAP_PROP_FRAME_HEIGHT:视频高度。
  • cv2.CAP_PROP_BRIGHTNESS:亮度。
  • cv2.CAP_PROP_CONTRAST:对比度。

代码:

以下代码的作用是打开摄像头,将采集到的视频流显示到窗口中。

python 复制代码
import cv2

#创建窗口
cv2.namedWindow('video', cv2.WINDOW_NORMAL)
cv2.resizeWindow('video', 640, 480)

#获取视频设备
cap = cv2.VideoCapture(0)

while True:
    ret, frame = cap.read()

    #将视频帧在窗口中显示
    cv2.imshow('video', frame)

    #等待键盘事件
    key = cv2.waitKey(1)
    if (key & 0xFF == ord('q')):
        break

#释放 videocapture
cap.release()
cv2.destroyAllWindows()

读取视频文件

只需要修改 VideoCapture 接口参数即可:

python 复制代码
import cv2

#创建窗口
cv2.namedWindow('video', cv2.WINDOW_NORMAL)
cv2.resizeWindow('video', 640, 480)

#读取视频文件
cap = cv2.VideoCapture('D:\\resource\\D026网络购物互联网科技.mov')

while True:
    ret, frame = cap.read()

    #将视频帧在窗口中显示
    cv2.imshow('video', frame)

    #等待键盘事件
    key = cv2.waitKey(40)
    if (key & 0xFF == ord('q')):
        break

#释放 videocapture
cap.release()
cv2.destroyAllWindows()

其中 waitKey 设置为40ms,由于当前播放的视频帧率是25fps,然后1000/25 = 40,于是将waitkey等待间隔设置为了40ms。

运行后:

视频录制

相关接口 - videoWrite

VideoWriter 用于将视频帧写入视频文件。可以设置视频格式、编解码器、帧速率等。

主要参数:

cv2.VideoWriter(filename, fourcc, fps, frameSize, isColor)

filename: 输出视频文件的路径或文件名。这个文件将存储捕捉到的视频。

fourcc: 编解码器代码(FourCC)。这指定了视频的编码格式。常见的 fourcc 编码器包括:

  • cv2.VideoWriter_fourcc(*'XVID'):XVID编码。
  • cv2.VideoWriter_fourcc(*'MJPG'):MJPEG编码。
  • cv2.VideoWriter_fourcc(*'MP4V'):MP4编码。
  • cv2.VideoWriter_fourcc(*'H264'):H.264编码。

fps: 帧率(每秒帧数)。例如,30 表示每秒30帧。

frameSize: 视频帧的尺寸,通常是一个元组 (width, height),如 (640, 480)。

isColor: 布尔值,指示是否保存为彩色视频。True 表示彩色视频(默认),False 表示灰度视频。

常用方法:

writer.write(frame): 将视频帧写入输出文件。

writer.release(): 释放视频写入对象,确保文件正确关闭。

代码:

以下代码的作用是从摄像头采集视频,显示到窗口中,同时保存到本地。

python 复制代码
import cv2

#创建VideoWriter
fourcc = cv2.VideoWriter_fourcc(*'XVID')
vw = cv2.VideoWriter('./out.mp4', fourcc, 20, (640, 480))

#创建窗口
cv2.namedWindow('video', cv2.WINDOW_NORMAL)
cv2.resizeWindow('video', 640, 480)

#获取视频设备
cap = cv2.VideoCapture(0)

while True:
    ret, frame = cap.read()

    #将视频帧在窗口中显示
    cv2.imshow('video', frame)

    #写数据到多媒体文件
    vw.write(frame)

    #等待键盘事件
    key = cv2.waitKey(1)
    if (key & 0xFF == ord('q')):
        break

#释放 videocapture
cap.release()

#释放VideoWriter
vw.release()

cv2.destroyAllWindows()

查看输出视频属性:

代码优化:

  • 增加摄像头开启判断
  • 增加采集视频失败处理
python 复制代码
import cv2

#创建VideoWriter
fourcc = cv2.VideoWriter_fourcc(*'XVID')
vw = cv2.VideoWriter('./out.mp4', fourcc, 20, (640, 480))

#创建窗口
cv2.namedWindow('video', cv2.WINDOW_NORMAL)
cv2.resizeWindow('video', 640, 480)

#获取视频设备
cap = cv2.VideoCapture(0)

while cap.isOpened:
    ret, frame = cap.read()
    if ret == False :
        break;
    
    #将视频帧在窗口中显示
    cv2.imshow('video', frame)
    cv2.resizeWindow('video', 640, 480)

    #写数据到多媒体文件
    vw.write(frame)

    #等待键盘事件
    key = cv2.waitKey(1)
    if (key & 0xFF == ord('q')):
        break

#释放 videocapture
cap.release()

#释放VideoWriter
vw.release()

cv2.destroyAllWindows()
相关推荐
isyoungboy2 小时前
opencv实现点到region最小距离,distance_pr
人工智能·opencv·计算机视觉
深蓝学院4 小时前
CVPR 2025最佳论文详解|VGGT:纯前馈Transformer架构,3D几何感知「大一统」模型来了!
计算机视觉
m0_743106461 天前
【论文笔记】AnySplat: pose-free feed-forward 3DGS
人工智能·深度学习·计算机视觉·3d·几何学
知舟不叙1 天前
基于OpenCV的图像增强技术:直方图均衡化与自适应直方图均衡化
人工智能·opencv·计算机视觉·图像增强
CoovallyAIHub1 天前
云南电网实战:YOLOv8m改进模型攻克输电线路异物检测难题技术详解
深度学习·算法·计算机视觉
风靡晚2 天前
用于汽车毫米波雷达的四维高分辨率点云图像
人工智能·算法·机器学习·计算机视觉·汽车·信息与通信·信号处理
whoarethenext2 天前
使用C/C++的OpenCV 构建人脸识别并自动抓拍系统
c语言·c++·opencv
这张生成的图像能检测吗2 天前
生成对抗网络(GANs)入门介绍指南:让AI学会“创造“的魔法(二)【深入版】
人工智能·pytorch·深度学习·神经网络·算法·生成对抗网络·计算机视觉
要努力啊啊啊2 天前
YOLOv1 技术详解:正负样本划分与置信度设计
人工智能·深度学习·yolo·计算机视觉·目标跟踪
硅谷秋水3 天前
Genie Centurion:通过人工-回放-和-细化指导加速规模化真实世界机器人训练
人工智能·深度学习·计算机视觉·机器人