opencv(python)视频按帧切片/cv2.VideoCapture()用法

这篇具有很好参考价值的文章主要介绍了opencv(python)视频按帧切片/cv2.VideoCapture()用法。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、介绍

cv2.VideoCapture是OpenCV中一个用于捕捉视频的类。它可以访问计算机的摄像头,或从视频文件中读取图像。通过cv2.VideoCapture,用户可以轻松地捕捉、保存、编辑和传输视频流数据。

使用cv2.VideoCapture可以实现以下功能:

1. 打开计算机的摄像头,实时捕捉摄像头的视频流数据。
2. 读取视频文件,逐帧解码并输出视频流数据。
3. 控制帧率,调整视频的播放速度。
4. 控制视频的长宽和分辨率。
5. 编辑视频流数据,比如添加水印、合并视频等操作。
6. 传输视频数据,可以通过网络传输视频流数据。

cv2.VideoCapture中最常用的方法有:

1. read():读取视频流数据中的一帧。
2. isOpened():检查当前的cv2.VideoCapture是否已经打开。
3. release():释放cv2.VideoCapture对象占用的资源。

例如以下代码展示如何使用cv2.VideoCapture对象打开计算机的摄像头并捕获实时视频:


import cv2

cap = cv2.VideoCapture(0)  # 打开计算机的摄像头

while True:
    ret, frame = cap.read()  # 读取视频流数据中的一帧

    cv2.imshow('frame', frame)  # 显示捕获的视频流数据

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

cap.release()  # 释放占用的资源
cv2.destroyAllWindows()

二、cv2.VideoCapture()视频的获取操作

1、从文件读取视频

参数是视频文件路径,打开方式如下:

videoCapture = cv2.VideoCapture(“../test1.mp4”) #.avi等视频文件

2、从摄像头读取视频

 VideoCapture(0)中参数是0,表示打开笔记本的内置摄像头,如果有多个摄像头,往上加就可。

videoCapture = cv2.VideoCapture(0)
如果要读取监控摄像头的视频流,需要知道指定摄像头的ip等信息。
# 使用rtsp流打开相机
videoCapture = cv2.VideoCapture(f'rtsp://{username}:{password}@{ip}:{port}/h264/ch1/main/av_stream')

三、videoCapture.read()按帧读内容

# 读帧
success, frame = videoCapture.read()
print(success)
print(frame)
success,frame是获.read()方法的两个返回值。 其中success是布尔值,如果读取帧是正确的则返回True,如果文件读取到结尾,它的返回值就为False。frame就是每一帧的图像,是个三维矩阵。

opencv(python)视频按帧切片/cv2.VideoCapture()用法,opencv,python

下面这个示例中,我们使用了默认摄像头(设备编号为0)作为输入,然后使用while循环逐帧读取视频并在窗口中显示。如果按下 'q' 键或无法读取视频,则退出循环并释放资源。

import cv2

# 创建 VideoCapture 对象
cap = cv2.VideoCapture(0)

# 循环读取视频流
while True:
    # 逐帧读取视频
    ret, frame = cap.read()

    # 如果不能读取视频,退出循环
    if not ret:
        break

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

    # 检测键盘输入,按 'q' 键退出循环
    key = cv2.waitKey(1)
    if key == ord('q'):
        break

# 释放资源并关闭窗口
cap.release()
cv2.destroyAllWindows()

什么是帧,帧的快慢是什么,影响什么
        视频的基本组成部分是帧(frame),即一系列静态图像,这些图像在一定速率下以连续的方式播放,形成动态图像,例如30帧/秒。视频每秒的帧数被称为帧率(Frame Rate),通常用“fps”(Frames Per Second)表示。例如,30fps表示视频每秒钟包含30帧图像。帧率决定了视频的流畅度和真实感。较高的帧率可以使视频看起来更加流畅,因为它们可以更快地刷新图像。例如,60fps的视频比30fps的视频看起来更加流畅。此外,较高的帧率还可以减少视频中的模糊和颤动,因为它们可以更好地捕捉运动。但较高的帧率会导致文件变大和编解码更复杂,因为需要处理更多的帧图像。
————————————————
https://blog.csdn.net/cvxiayixiao/article/details/130519349文章来源地址https://www.toymoban.com/news/detail-723020.html

四、实例

import os
import cv2


# 定义保存图片函数
# image:要保存的图片
# pic_address:图片保存地址
# num: 图片后缀名,用于区分图片,int 类型
def save_image(image, address, num):
    pic_address = address + str(num) + '.jpg'
    cv2.imwrite(pic_address, image)


def video_to_pic(video_path, save_path, frame_rate):
    # 读取视频文件
    # video_path为视频路径,save_path为保存图片路径,frame_rate可以设置多少帧切一张图

    global videoCap
    #这里将videoCapture加global意思是设置成了全局变量,后面释放摄像头要用到这个变量

    videoCap = cv2.VideoCapture(video_path)

    if videoCap.isOpened():
        print("摄像头or视频打开成功")
    if not videoCap.isOpened():
        print("找不到摄像头or视频")
        exit()

 
    # 读帧
    success, frame = videoCap.read()
    """success,frame是获.read()方法的两个返回值。 
    其中success是布尔值,如果读取帧是正确的则返回True,如果文件读取到结尾,它的返回值就为False。
    frame就是每一帧的图像,是个三维矩阵。"""
    # print(success)
    # print(frame)
    if videoCap.open(video_path):
        print("视频提取成功")
    if not videoCap.open(video_path):
        print("can not open the video")

    j = 0
    i = 0
    while success:
        i = i + 1
        # 每隔固定帧保存一张图片
        if i % frame_rate == 0:
            j = j + 1
            save_image(frame, save_path, j)
            print('图片保存地址:', save_path + str(j) + '.jpg')
        success, frame = videoCap.read()
        # if cv2.waitKey(1) & 0xFF == ord('q'):
        #     break


if __name__ == '__main__':


    # 视频文件和图片保存地址
    SAMPLE_VIDEO = 'F:/Capture/dist/video/sc0914.mp4'
  
    SAVE_PATH = 'F:/Capture/dist/VideotoImages/sc0914/'
    #注意保存本地路径不能有中文,save_image()以及imwrite、cv2.imread()均不支持有中文的路径

    if not os.path.exists(SAVE_PATH):
        os.makedirs(SAVE_PATH)

    # 设置固定帧率
    FRAME_RATE = 10
    video_to_pic(SAMPLE_VIDEO, SAVE_PATH, FRAME_RATE)


# 调用release()释放摄像头
# 调用destroyAllWindows()关闭所有图像窗口。
videoCap.release()
cv2.destroyAllWindows()

到了这里,关于opencv(python)视频按帧切片/cv2.VideoCapture()用法的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • cv2.VideoCapture 及 ffmpeg 打开视频流

    安装ffmpeg: windows电脑FFmpeg安装教程手把手详解   安装ffmpeg 运行ffmpeg:

    2024年02月12日
    浏览(42)
  • opencv视频截取每一帧并保存为图片python代码CV2实现练习

    当涉及到视频处理时,Python中的OpenCV库提供了强大的功能,可以方便地从视频中截取每一帧并将其保存为图片。这是一个很有趣的练习,可以让你更深入地了解图像处理和多媒体操作。 使用OpenCV库,你可以轻松地读取视频文件,并在循环中逐帧读取视频的每一帧。随后,你可

    2024年02月12日
    浏览(53)
  • OpenCV中cv2的常见用法

    使用函数cv2.imread(filepath,flags)读入一副图片 filepath:要读入图片的完整路径 flags:读入图片的标志 cv2.IMREAD_COLOR:默认参数,读入一副彩色图片,忽略alpha通道 cv2.IMREAD_GRAYSCALE:读入灰度图片 cv2.IMREAD_UNCHANGED:顾名思义,读入完整图片,包括alpha通道 使用函数cv2.imshow(wname,img)显

    2024年02月10日
    浏览(40)
  • cv2.videocapture.read()参数

    cv2.videocapture.read()是OpenCV库中读取视频文件的函数,其参数为一个可选的参数,用于指定读取视频文件时的参数。该参数是一个整数类型的值,可以为以下值之一: 0: 默认参数,表示从第一个可用的摄像头中读取视频流。 1: 表示从第二个可用的摄像头中读取视频流。 字符串

    2024年02月16日
    浏览(35)
  • OpenCV读取视频失败<无可用信息,未为 opencv_world453.dll 加载任何符号> cv::VideoCapture

    OpenCV读取视频失败<无可用信息,未为 opencv_world453.dll 加载任何符号> cv::VideoCapture 出现这种情况基本是因为: VideoCapture 读取视频路径错误。 比如:在这里我电脑不知道为什么默认摄像头是1不是0,所以视频读取错误,我改为 VideoCapture cap(1)就对了。 同理,如果调用的不是

    2024年01月23日
    浏览(42)
  • cv2.VideoCapture拉取rtsp流超时问题

    在python中,使用cv2拉去rtsp视频流时,如果rtsp流异常,不管是cv2.VideoCapture()或者VideoCapture().read()都可能长时间阻塞(很多人说默认超时30s),而且找不到设置超时设定的地方,尝试过使用线程处理,但实际使用比较玛法麻烦,在stackoverflow.找到解决方法:

    2024年02月16日
    浏览(39)
  • 【OpenCV】图像上绘制文字cv2.putText()函数用法,添加倾斜透明水印

    在OpenCV中,调用cv2.putText()函数可添加文字到指定位置,对于需要在图片中加入文字的场景提供了一种比较直接方便的方式。 注意:OpenCV 不支持显示中文字符,使用 cv2.putText() 时添加的文本字符串不能包含中文字符(包括中文标点符号) 其函数原型如下所示: 上述参数分别

    2024年02月04日
    浏览(56)
  • opencv 将多帧图像合成为视频 cv2.VideoWriter()

    将文件夹下有时间戳或者有序的 *.jpg 图像合成为一个 mp4 格式的视频。 附加:加进度条看合成进度。 以上示例合成视频为 mp4 格式,如需合成其它视频格式,可修改 cv2.VideoWriter_fourcc() 参数。请自行查询相关参数。

    2024年02月11日
    浏览(42)
  • python中cv2.projectPoints的用法

    我们先看一下c++ 中的参数解释 第一个输入的点是一个, (N, 3) 维的 三维坐标系中的点, xyz 第二个是旋转向量, 第三个是平移向量. 第四个是相机内参, 第五个是相机的畸变系数, 如果输入是4个时, 就是[k1, k2, p1, p2], 输入5个时就是 [k1, k2, p1, p2, k3], 也可以是更多, [k1, k2, p1, p2, k3,

    2024年02月06日
    浏览(34)
  • Python中cv2.Canny() 函数用法详解

    一、Canny算子边缘检测原理及步骤 cv2.Canny() 函数是 OpenCV 中的边缘检测函数之一,用于检测图像的边缘。它的基本原理是通过计算图像中每个像素点的梯度值来检测边缘。具体来说,它的实现步骤如下: 1、对输入图像进行高斯滤波,以平滑图像并去除噪声; 2、计算图像的梯

    2024年02月09日
    浏览(50)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包