Python 计算机视觉 OpenCV 学习(三)

本文介绍了如何使用OpenCV在Python中捕获来自摄像头或文件的视频,包括检查摄像头是否打开,获取视频帧的宽高,以及播放和保存视频。示例代码展示了如何读取视频帧,显示帧内容,以及使用特定编码器保存视频。此外,还提到了不同操作系统下可用的编码器选项。
摘要由CSDN通过智能技术生成
OpenCV 读取视频

想捕获视频,首先创建 cv.VideoCapture() 对象
cv.VideoCapture() 参数决定了视频来源

  • 0 一般是电脑自带的摄像头
  • 1、2、3 电脑的外接摄像头
  • 视频文件的路径
  • rtsp源
笔记本电脑用自带的摄像头取视频
import numpy as np
import cv2 as cv
cap = cv.VideoCapture(0)     # 打开自带相机
if not cap.isOpened():       # 判断相机是否打开
    print("Cannot open camera")  
    exit()
while True:
    # 逐帧捕获
    ret, frame = cap.read()     # 取视频帧
    if not ret:
        print("Can't receive frame (stream end?). Exiting ...")
        break
        
    cv.imshow('frame', frame)   # 显示结果帧e
    if cv.waitKey(1) == ord('q'):   # q退出程序
        break
        
cap.release()      # 完成所有操作后,释放捕获器
cv.destroyAllWindows()
对视频帧的操作
  • cap.get(cv.CAP_PROP_FRAME_WIDTH) # 获取视频的宽度
  • cap.get(cv.CAP_PROP_FRAME_HEIGHT) # 获取视频的高度
  • cap.set(propId,value) # 设置视频的宽高 propId 为cv.CAP_PROP_FRAME_WIDTH或cv.CAP_PROP_FRAME_HEIGHT value 为设置的值int

默认分辨率为640x480

播放文件视频
import numpy as np
import cv2 as cv
cap = cv.VideoCapture('Video_20211211152247.wmv')
while cap.isOpened():
    ret, frame = cap.read()
    # 如果正确读取帧,ret为True
    if not ret:
        print("Can't receive frame (stream end?). Exiting ...")
        break
    cv.imshow('frame', frame)
    if cv.waitKey(1) == ord('q'):
        break
cap.release()
cv.destroyAllWindows()
OpenCV 保存视频
  • 在Fedora中:DIVX,XVID,MJPG,X264,WMV1,WMV2。(最好使用XVID。MJPG会生成大尺寸的视频。X264会生成非常小的尺寸的视频)

  • 在Windows中:DIVX(尚待测试和添加)

  • 在OSX中:MJPG(.mp4),DIVX(.avi),X264(.mkv)

  • cv.VideoWriter_fourcc(‘M’,‘J’,‘P’,‘G’)或 cv.VideoWriter_fourcc(*‘MJPG’) # 定义编码器

  • cv.VideoWriter(‘video.avi’, fourcc, 20.0, (640, 480)) # 创建写入视频对象

  • out.write(frame) # 写入视频帧

  • cv.flip(frame, 0) # 视频帧旋转

import numpy as np
import cv2 as cv
cap = cv.VideoCapture(0)
# 定义编解码器并创建VideoWriter对象
fourcc = cv.VideoWriter_fourcc(*'XVID')
out = cv.VideoWriter('video.avi', fourcc, 20.0, (640,  480))  
while cap.isOpened():
    ret, frame = cap.read()
    if not ret:
        print("Can't receive frame (stream end?). Exiting ...")
        break
    # frame = cv.flip(frame, 0)
    # 写翻转的框架
    out.write(frame)
    cv.imshow('frame', frame)
    if cv.waitKey(1) == ord('q'):
        break
# 完成工作后释放所有内容
cap.release()
out.release()
cv.destroyAllWindows()
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

阿伟-_-

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值