首页 > 其他分享 >OPENCV(视频入门笔记)

OPENCV(视频入门笔记)

时间:2024-07-03 14:56:23浏览次数:17  
标签:视频 入门 frame cap 笔记 OPENCV cv 摄像头 读取

目标

  • 学习读取视频,显示视频和保存视频。 学习从相机捕捉并显示它。
  • cv.VideoCapture(),cv.VideoWriter() 从相机中读取视频

从相机中读取视频

通常情况下,我们必须用摄像机捕捉实时画面。提供了一个非常简单的界面。让我们从摄像头捕捉一段视频(我使用的是我笔记本电脑内置的网络摄像头) ,将其转换成灰度视频并显示出来。只是一个简单的任务开始。

要捕获视频,需要创建一个 VideoCapture 对象。它的参数可以是设备索引或视频文件的名称。
设备索引就是指定哪个摄像头的数字。。所以我简单地传0(或-1)。你可以通过传递1来选择第二个相机,以此类推。在此之后,你可以逐帧捕获。但是在最后,不要忘记释放俘虏。

import cv2 as cv  # 导入cv2模块,并简写为cv,这是OpenCV的Python接口  
  
cap = cv.VideoCapture(0)  # 创建一个VideoCapture对象,参数0表示使用计算机的默认摄像头  
  
if not cap.isOpened():  # 检查摄像头是否成功打开  
    print("break")  # 如果摄像头没有打开,打印"break"(这里的信息可能不够明确,通常我们会打印更具体的错误信息)  
    exit()  # 退出程序  
  
while(1):  # 创建一个无限循环,用于不断读取摄像头捕获的帧  
    ret, frame = cap.read()  # 从摄像头读取一帧,ret是一个布尔值,表示是否成功读取到帧;frame是读取到的帧图像  
    if not ret:  # 如果读取帧失败  
        print("error")  # 打印错误信息  
        break  # 跳出循环  
  
    gray = cv.cvtColor(frame, cv.COLOR_BGR2GRAY)  # 将读取到的彩色帧图像转换为灰度图像  
    cv.imshow("window", gray)  # 在名为"window"的窗口中显示灰度图像  
    if cv.waitKey(1) == ord(' '):  # 等待1毫秒看是否有键盘输入,如果有且是空格键(' '),则执行if语句内的代码  
        break  # 跳出循环,结束视频捕获和显示  
  
cap.release()  # 释放VideoCapture对象,即关闭摄像头  
cv.destroyAllWindows()  # 销毁所有OpenCV创建的窗口

cap.read()
第一个参数返回布尔值(True/ False)。如果正确读取了帧,它将为True。因此,你可以通过检查此返回值来检查视频的结尾。
第二个参数返回读取视频的值

我可以通过
cap.get(cv.CAP_PROP_FRAME_WIDTH)和cap.get(cv.CAP_PROP_FRAME_HEIGHT)
检查框架的宽度和高度。默认情况下,它的分辨率为640x480。但我想将其修改为320x240。只需使用和即可。

从文件播放视频

它与从相机捕获相同,只是用视频文件名更改摄像机索引。另外,在显示框架时,请使用适当的时间cv.waitKey()。如果太小,则视频将非常快,而如果太大,则视频将变得很慢(嗯,这就是显示慢动作的方式)。正常情况下25毫秒就可以了。

import cv2 as cv  # 导入cv2模块,并简称为cv,用于处理图像和视频  
  
# 使用cv2的VideoCapture函数打开视频文件  
cap = cv.VideoCapture('./video/test1.avi')  
  
# 检查视频是否成功打开  
if not cap.isOpened():  
    print("failed")  # 如果视频文件未成功打开,则打印失败信息  
    exit()  # 并退出程序  
  
# 无限循环,直到视频结束或用户按下空格键  
while 1:  
    ret, frame = cap.read()  # 读取一帧视频  
    # 如果ret为False,说明视频已结束或读取出错  
    if not ret:  
        print("视频已经结束")  # 打印视频结束信息  
        break  # 跳出循环  
  
    # 将读取到的BGR格式的帧转换为灰度图像  
    img = cv.cvtColor(frame, cv.COLOR_BGR2GRAY)  
  
    # 显示灰度图像  
    cv.imshow("img", img)  
  
    # 等待15毫秒,如果在此期间用户按下任意键,则检测是否按下空格键  
    # ord(" ")获取空格键的ASCII码值,如果用户按下空格键,则break跳出循环  
    if cv.waitKey(15) == ord(" "):  
        break  
  
# 释放视频捕捉资源  
cap.release()  
  
# 销毁所有OpenCV创建的窗口  
cv.destroyAllWindows()

保存视频

我们捕捉一个视频,一帧一帧地处理,我们想要保存这个视频。对于图像,它非常简单,只需使用 cv.imwrite()。但对于图像则比较麻烦。
首先创建一个 VideoWriter 对象。我们应该指定输出文件名(例如: output.avi)。然后我们应该指定 FourCC 代码(详见下一段)。然后传递帧率的数量和帧大小。最后一个是颜色标志。如果为 True,编码器期望颜色帧,否则它与灰度帧一起工作。
FourCC: 是用于指定视频编解码器的4字节代码。

# 导入必要的库
import numpy as np  # 导入NumPy库,主要用于数组和矩阵运算
import cv2 as cv  # 导入OpenCV库,并简写为cv,它是计算机视觉和图像处理的主要库

# 创建VideoCapture对象,参数0通常表示计算机的默认摄像头
cap = cv.VideoCapture(0)

# 定义视频编解码器并创建VideoWriter对象
# fourcc是一个4字节码,用于指定视频的编解码器。这里使用'XVID'
fourcc = cv.VideoWriter_fourcc(*'XVID')
# 创建VideoWriter对象,参数依次为输出文件名、编解码器、帧率、帧大小
out = cv.VideoWriter('output.avi', fourcc, 20.0, (640, 480))

# 读取摄像头的视频流,直到视频结束
while cap.isOpened():
    # 从摄像头读取一帧
    ret, frame = cap.read()
    # 如果ret为False,说明读取失败或视频结束
    if not ret:
        print("Can't receive frame (stream end?). Exiting ...")
        break

        # 翻转图像(在垂直方向上),这里第二个参数为0表示沿x轴翻转
    frame = cv.flip(frame, 1)

    # 将翻转后的帧写入到输出视频文件中
    out.write(frame)

    # 显示当前帧
    cv.imshow('frame', frame)

    # 等待1毫秒,如果按下'q'键,则退出循环
    if cv.waitKey(1) == ord('q'):
        break

    # 释放VideoCapture对象
cap.release()
# 释放VideoWriter对象
out.release()
# 销毁所有OpenCV创建的窗口
cv.destroyAllWindows()

在创建VideoWriter对象时,需要指定输出视频的帧率(这里是20.0帧/秒)和帧大小(这里是640x480像素)。这些参数应与摄像头捕获的帧的帧率和大小相匹配,或者根据需要进行调整。

标签:视频,入门,frame,cap,笔记,OPENCV,cv,摄像头,读取
From: https://blog.csdn.net/zsy54577/article/details/140148965

相关文章

  • Java编程从入门到放弃
    1.配置开发环境安装JDK官网下载地址:https://www.oracle.com/java/technologies/downloads/配置环境变量最新版本JDK22无需手动配置环境变量。老版本:此电脑-右键属性-高级系统设置-环境变量-系统变量-Path-编辑C:\Java\jdk1.8.0_65\bin检查结果java-versionHelloWor......
  • 05-Excel初阶操作-学习笔记
    DATE函数函数格式:DATE(参数1,参数2,参数3)参数说明:参数1:年份;参数2:月份;参数3:日作用:将文本类型转换为正确的日期格式应用场景:身份证号提取出生日期其中,MID()是文本截取函数注意!如果输入2000-2-30使用date函数后会进行进位显示2000-3-1Year、Month、Day函数作用:日期拆分为......
  • 【2024版】最新HW参考 | HVV行动之蓝军经验总结(非常详细)零基础入门到精通,收藏这一篇就
    ‍正文:HW行动,攻击方的专业性越来越高,ATT&CK攻击手段覆盖率也越来越高,这对于防守方提出了更高的要求,HW行动对甲方是一个双刃剑,既极大地推动了公司的信息安全重视度和投入力量,但同时对甲方人员的素质要求有了很大提升,被攻破,轻则批评通报,重则岗位不保;大的金融、央企可能不担心......
  • 多模态大模型入门指南
    作者:林夕,阿里巴巴集团高级算法工程师,专注多模态大模型研究。声明:本文只做分享,版权归原作者,侵权私信删除!原文:https://zhuanlan.zhihu.com/p/682893729内容总结,本篇综述主要介绍和分析了以下几个方面:•概述了MM-LLMs的设计形式,将模型架构分为5个部分:模态编码器、输入......
  • 复述生成任务分类-笔记-Task-Oriented Paraphrase Analytics
    目录前言正文 复述生成和搜索引擎查询建议和扩展建议(QuerySuggestionandExpansion)复述生成和数据集数据增强(DataAugmentation):生成保持类别标签的合成数据,用于增加训练或测试数据集。信息安全和复述生成对抗样本生成(AdversarialExampleGeneration):保留标......
  • 关于Mamba和Mamba-2经典论文的学习笔记总结,以及Mamba和Transformer的对比总结,欢迎交流
    最近阅读论文的时候,发现很多基于Mamba改进的CV方向论文,好奇的去了解了一下这个Mamba的起源,以及Mamba-2的提出,简单的对Mamba和Transformer的异同进行了归纳,学到了一些东西,我将从第一部分Mamba的提出背景和结构原理,第二部分Mamba与Transformer的异同,第三部分mamba-2的提出背景......
  • AGNN论文阅读笔记
    Attention-BasedGraphNeuralNetworkforNewsRecommendation论文阅读笔记Abstract存在的问题:​ 用户的历史点击序列信息对用户兴趣的影响也不尽相同,简单地将它们结合起来并不能反映这种差异。提出方法:​ 我们提出了一种基于注意力的图神经网络新闻推荐模型。在我们的模型......
  • NRMG论文阅读笔记
    NRMG:NewsRecommendationWithMultiviewGraphConvolutionalNetworks论文阅读笔记Abstract存在的问题:​ 在学习新闻表征的过程中,目前大多数研究工作都没有充分利用新闻特征,这就很难学习到更全面的新闻表征。大多数研究工作只是从单一角度学习用户表征,这可能不足以学习多样......
  • (分享笔记)算法 第四版 (塞奇威克(Sedgewick, R.))
    书:pan.baidu.com/s/1UtoEsfQDHJqcL7zpdvFP-Q提取码:oq5x我的阅读笔记:算法基础: 介绍基本的算法概念,如排序、查找、数据结构等。数据结构: 涵盖各种常见的数据结构,如数组、链表、树、图等,以及它们的应用和实现。排序和搜索算法: 详细介绍各种排序算法,如快速排序、归并排序,以及......
  • 2024爆火全网的LLM大语言模型黑书!入门大模型大家全都在学~(附pdf)
    今天给大家推荐一本4月份才新出的大型语言模型(LLM)的权威教程《基于GPT-3、ChatGPT、GPT-4等Transformer架构的自然语言处理》!Google工程总监AntonioGulli作序,一堆大佬推荐!这含金量不用多说,不多bb开始介绍!本教程内容主要内容•了解用于解决复杂语言问题的新技术•将GP......