OpenCV视频操作

一、视频读写

cap = cv2.VideoCapture(filepath)

filepath: 可以是摄像头,也可以是文件路径

1、读取视频

import numpy as np
import cv2

cap = cv2.VideoCapture(0)  # 1. 实例化VideoCapture对象, 0表示本机第一个摄像头
while cap.isOpened():    # 2. 判断视频是否读取成功
    ret, frame = cap.read()  # 3. 捕获帧,ret成功返回TRUE,frame每一帧图像
     # 4. 获取成功显示图像
    if ret == True:
        # imshow第一个参数为窗口的名称,第二个参数为显示的图像对象
        cv2.imshow("frame", frame)
    
     # 5.每一帧间隔为25ms
    if cv2.waitKey(25) & 0xFF == ord('q'):
        break
# 6. 释放摄像头,关闭窗口
cap.release()  
cv2.destroyAllWindows()

2、播放视频文件

import numpy as np
import cv2

cap = cv2.VideoCapture(r"D:\software\youku\country.mp4")  # 打开视频文件
while cap.isOpened():
    ret, frame = cap.read()  # 读取帧
    cv2.imshow("frame", frame)  # 显示
    c = cv2.waitKey(25)
    if c == 27:  # ESC键
        break

cap.release()  # 释放视频设备
cv2.destroyAllWindows()

3、视频属性

3.1 获取视频属性

retval = cap.get(propId)

参数:

propId: 从0到18的数字,每个数字表示视频的属性

常用属性有:

3.2 修改视频属性

cap.set(propId,value)

参数:

        proid: 属性的索引,与上面的表格相对应

        value: 修改后的属性值

读取视频返回值介绍:ret, frame = cap.read()

参数

        ret: 若获取成功返回True,获取失败,返回False

        frame: 获取到的某一帧的图像

4、在视频中画图

4.1 画矩形

cv2.rectangle(img, (xmin, ymin), (xmax,ymax), (0,255,0), 1)
cv2.rectangle(frame, (350, 0), (500, 250), (0, 255, 0), 3)
参数
    窗口
    左上角顶点和右下角顶点的坐标
    画框颜色: RGB颜色
    画线的粗细:不设置,有默认值1

4.2 画圆

cv2.circle (img,(380,0),63,(255,0,0),3)
圆心与半径,显示颜色以及粗细
线的粗细:-1:填充圆内部,其他值为粗细

示例:
# 画出空心圆
cv2.circle(frame, (380, 0), 63, (0, 0, 255), 1)
# 填充内部
cv2.circle(frame, (380, 0), 63, (0, 0, 255), -1)

4.3 文字

cv2.putText(img, 'python', (100,100), font, 4, (255,255,255),2,cv2.LINE_AA)  
在图片上添加文字,需要设置,文字内容,绘制的位置,字体类型、大小、颜色、粗细、类型
cv2.putText(frame, 'python', (100, 100), cv2.FONT_HERSHEY_SIMPLEX, 4, (255, 255, 255), 2, cv2.LINE_AA)

5、保存视频

5.1 流程

  1. 读取视频
  2. 创建保存视频的对象,设置编码格式,帧率,图像的宽高等
  3. 获取读取视频中的每一帧图像
  4. 将每一帧图像写入到输出文件中
  5. 资源释放

1. 创建视频写入的对象

out = cv2.VideoWriter(filename,fourcc, fps, frameSize)

参数:

        filename:视频保存的位置

        fourcc:指定视频编解码器的4字节代码

        fps:帧率

        frameSize:帧大小

其中设置视频的编解码器,如下所示

retval = cv2.VideoWriter_fourcc( c1, c2, c3, c4 )

参数:

    c1,c2,c3,c4: 是视频编解码器的4字节代码,在 fourcc.org中找到可用代码列表,与平台紧密相关,

常用的有: 

    在Windows中:DIVX(输出为.avi) 

    在OS中:MJPG(.mp4),DIVX(.avi),X264(.mkv)。

5.2 示例

# 视频保存
import cv2 as cv
import numpy as np

# 1. 读取视频
cap = cv.VideoCapture(0)
# 这里打开摄像头录制了一段自己的视频

# 2. 获取图像的属性(宽和高,),并将其转换为整数
frame_width = int(cap.get(3))
frame_height = int(cap.get(4))

# 3. 创建保存视频的对象,设置编码格式,帧率,图像的宽高等
out = cv.VideoWriter('outpy.avi',cv.VideoWriter_fourcc('M','J','P','G'), 10, (frame_width,frame_height))
while cap.isOpened():
    # 4.获取视频中的每一帧图像
    ret, frame = cap.read()
    if ret == True:
        # 5.将每一帧图像写入到输出文件中
        out.write(frame)
    if cv2.waitKey(25) & 0xFF == ord('q'):  # ESC键
        break

# 6.释放资源
cap.release()
out.release()
cv.destroyAllWindows()

二、视频追踪

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
OpenCV 是一个用于计算机视觉的开源库,它提供了各种图像和视频处理功能。以下是 OpenCV 中的一些常见视频操作: 1. 读取视频:可以使用 VideoCapture 类从本地文件或网络摄像头读取视频流。 ``` import cv2 video = cv2.VideoCapture('video.mp4') # 或者设备索引如 0 while video.isOpened(): ret, frame = video.read() if not ret: break # 处理帧 ... video.release() cv2.destroyAllWindows() ``` 2. 显示视频:可以使用 imshow() 方法显示视频帧。 ``` cv2.imshow('Video', frame) cv2.waitKey(1) ``` 3. 保存视频:可以使用 VideoWriter 类将处理后的帧保存视频文件。 ``` fourcc = cv2.VideoWriter_fourcc(*'XVID') writer = cv2.VideoWriter('output.avi', fourcc, 20.0, (640, 480)) while video.isOpened(): ret, frame = video.read() if not ret: break # 处理帧 ... writer.write(frame) ``` 4. 视频分割:可以使用 split() 将视频分割成单个帧。 ``` frames = [] while video.isOpened(): ret, frame = video.read() if not ret: break frames.append(frame) # 对单个帧进行处理 for frame in frames: # 处理帧 ... ``` 5. 视频合成:可以使用 merge() 将处理后的帧合成为视频。 ``` fourcc = cv2.VideoWriter_fourcc(*'XVID') writer = cv2.VideoWriter('output.avi', fourcc, 20.0, (640, 480)) for frame_processed in frames_processed: # 对单个帧进行处理 writer.write(frame_processed) ``` 这些是 OpenCV 中的一些常见视频操作,您可以使用它们来实现各种视频处理功能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值