【OpenCV学习笔记03】- 视频入门

这篇具有很好参考价值的文章主要介绍了【OpenCV学习笔记03】- 视频入门。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

这是对于 OpenCV 官方文档的 GUI 功能的学习笔记。学习笔记中会记录官方给出的例子,也会给出自己根据官方的例子完成的更改代码,同样彩蛋的实现也会结合多个知识点一起实现一些小功能,来帮助我们对学会的知识点进行结合应用。
如果有喜欢我笔记的请麻烦帮我关注、点赞、评论。谢谢诸位。

学习笔记:
学习笔记目录里面会收录我关于OpenCV系列学习笔记博文,大家如果有什么不懂的可以通过阅读我的学习笔记进行学习。
【OpenCV学习笔记】- 学习笔记目录

内容

  • 学习加载视频、显示视频和保存视频。
  • 学习用相机捕捉并显示。
  • 你要学习这些函数:cv.VideoCapture(),cv.VideoWriter()

从相机捕捉视频

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

要捕获视频,你需要创建一个 VideoCapture 对象。它的参数可以是设备索引或视频文件的名称。设备索引就是指定摄像头的编号(索引)。正常情况下,一个摄像头会被连接(as in my case)。所以我简单地传0(或-1)。你可以通过传递1来选择第二个相机,以此类推。在此之后,你可以逐帧捕获,但是在最后,不要忘记释放 Capture 对象。

示例代码:

import numpy as np
import cv2 as cv
cap = cv.VideoCapture(0)
while(True):
    # 一帧一帧捕捉
    ret, frame = cap.read()
    # 我们对帧的操作在这里
    gray = cv.cvtColor(frame, cv.COLOR_BGR2GRAY)
    # 显示返回的每帧
    cv.imshow('frame',gray)
    if cv.waitKey(1) & 0xFF == ord('q'):
        break
# 当所有事完成,释放 VideoCapture 对象
cap.release()
cv.destroyAllWindows()

cap.read() 返回一个 bool 值(True/False)。如果加载成功,它会返回True。因此,你可以通过这个返回值判断视频是否结束。

有时,cap 可能没有初始化 capture。在这种情况下,此代码显示错误。你可以通过该方法 cap.isOpened() 检查它是否初始化。如果它是 True,那么是好的,否则用 cap.open() 打开在使用。

你也可以通过使用 cap.get(propId) 函数获取一些视频的特征,这里的 propld 是一个 0-18 的数字,每个数字代表视频的一个特征 (如果这个视频有),或者使用 cv::VideoCapture::get() 获取全部细节。它们中有些值可以使用 cap.set(propId, value) 修改,Value 就是你想要的新值。

例如:我可以用 cap.get(cv.CAP_PROP_FRAME_WIDTH) 获得宽, cap.get(cv.CAP_PROP_FRAME_HEIGHT) 获得高。它返回的是 640x480,但是我想把它修改为 320x240。仅使用 ret = cap.set(cv.CAP_PROP_FRAME_WIDTH,320) 和 ret = cap.set(cv.CAP_PROP_FRAME_HEIGHT,240)

Note * 如果给你报错了,确保用任意其他的相机程序 (如 Linux 下的 Cheese 程序) 可以正常工作。

保存视频

我们捕获视频,逐帧处理然后保存下来。对于图像来说,是非常的简单,就用 cv.imwrite()。这里需要做更多的工作。

这次我们创建一个 VideoWriter 对象。我们应该指定输出文件的名字 (例如:output.avi)。然后我们应该指定 FourCC 码 (下一段有介绍)。然后应该传递每秒帧数和帧大小。最后一个是 isColor flag。如果是 True,编码器期望彩色帧,否则它适用于灰度帧。

FourCC 是用于指定视频解码器的 4 字节代码。这里 fourcc.org 是可用编码的列表。它取决于平台,下面编码就很好。

  • In Fedora: DIVX, XVID, MJPG, X264, WMV1, WMV2. (XVID 是最合适的. MJPG 结果比较大. X264 结果比较小)
  • In Windows: DIVX (还需要测试和添加跟多内容)
  • In OSX: MJPG (.mp4), DIVX (.avi), X264 (.mkv).

对于 MJPG, FourCC 的代码作为 **cv.VideoWriter_fourcc(‘M’,‘J’,‘P’,‘G’) **或 **cv.VideoWriter_fourcc(*‘MJPG’) **传递。
下面的代码从相机捕获,在垂直方向翻转每一帧然后保存它。

示例代码:

import numpy as np
import cv2 as cv

cap = cv.VideoCapture(0)
# 声明编码器和创建 VideoWrite 对象
fourcc = cv.VideoWriter_fourcc(*'XVID')
out = cv.VideoWriter('output.avi',fourcc, 20.0, (640,480))
while(cap.isOpened()):
    ret, frame = cap.read()
    if ret==True:
        frame = cv.flip(frame,0)
        # 写入已经翻转好的帧
        out.write(frame)
        cv.imshow('frame',frame)
        if cv.waitKey(1) & 0xFF == ord('q'):
            break
    else:
        break
# 释放已经完成的工作
cap.release()
out.release()
cv.destroyAllWindows()

播放视频文件

它和从相机捕获一样,只需要用视频文件名更改相机索引。同时显示 frame,为 cv.waitKey() 设置合适的时间。如果它太小,视频将非常快,如果太大,视频将很慢 (嗯,这就是显示慢动作)。正常情况下,25 毫秒就可以了。
示例代码:

import numpy as np
import cv2 as cv
cap = cv.VideoCapture('vtest.avi')
while(cap.isOpened()):
    ret, frame = cap.read()
    gray = cv.cvtColor(frame, cv.COLOR_BGR2GRAY)
    cv.imshow('frame',gray)
    if cv.waitKey(1) & 0xFF == ord('q'):
        break
cap.release()
cv.destroyAllWindows()

Note * 确保 ffmpeg 和 gstreamer 安装合适的版本。有时,使用 Video Capture 是比较头痛的,主要是因为错误的安装 ffmpeg 或 gstreamer。文章来源地址https://www.toymoban.com/news/detail-785127.html

到了这里,关于【OpenCV学习笔记03】- 视频入门的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • 【计算机视觉—python 】 图像处理入门教程 —— 图像属性、像素编辑、创建与复制、裁剪与拼接【 openCV 学习笔记 005 to 010 and 255】

    OpenCV中读取图像文件后的数据结构符合Numpy的ndarray多维数组结构,因此 ndarray 数组的属性和操作方法可用于图像处理的一些操作。数据结构如下图所示: img.ndim:查看代表图像的维度。彩色图像的维数为3,灰度图像的维度为2。 img.shape:查看图像的形状,代表矩阵的行数(高

    2024年01月19日
    浏览(44)
  • python学习笔记:opencv的图像操作

    什么是opencv? opencv是一个开源的计算机视觉库,可以在http://opencv.org获取,opencv库用C,C++,python等多种语言编写,在使用中,经常用opencv打开存储器的图像,对摄像头的图像进行捕捉并保存或者对图像进行预处理,以实现图像更好的额完成算法分类,应用领域很广:在人机互

    2024年02月07日
    浏览(36)
  • 竞赛 深度学习YOLO图像视频足球和人体检测 - python opencv

    🔥 优质竞赛项目系列,今天要分享的是 🚩 深度学习YOLO图像视频足球和人体检测 该项目较为新颖,适合作为竞赛课题方向,学长非常推荐! 🥇学长这里给一个题目综合评分(每项满分5分) 难度系数:3分 工作量:3分 创新点:5分 🧿 更多资料, 项目分享: https://gitee.com/dan

    2024年02月07日
    浏览(32)
  • OpenCV学习笔记 | ROI区域选择提取 | Python

            ROI区域是指图像中我们感兴趣的特定区域,OpenCV提供了一些函数来选择和提取ROI区域,我们可以使用OpenCV的鼠标事件绑定函数,然后通过鼠标操作在图像上绘制一个矩形框,该矩形框即为ROI区域。本文将介绍代码的实现以及四个主要函数 cv2.setMouseCallback、def sele

    2024年02月07日
    浏览(29)
  • 竞赛选题 深度学习YOLO图像视频足球和人体检测 - python opencv

    🔥 优质竞赛项目系列,今天要分享的是 🚩 深度学习YOLO图像视频足球和人体检测 该项目较为新颖,适合作为竞赛课题方向,学长非常推荐! 🥇学长这里给一个题目综合评分(每项满分5分) 难度系数:3分 工作量:3分 创新点:5分 🧿 更多资料, 项目分享: https://gitee.com/dan

    2024年02月07日
    浏览(34)
  • 软件杯 深度学习YOLO图像视频足球和人体检测 - python opencv

    🔥 优质竞赛项目系列,今天要分享的是 🚩 深度学习YOLO图像视频足球和人体检测 该项目较为新颖,适合作为竞赛课题方向,学长非常推荐! 🥇学长这里给一个题目综合评分(每项满分5分) 难度系数:3分 工作量:3分 创新点:5分 🧿 更多资料, 项目分享: https://gitee.com/dan

    2024年04月11日
    浏览(30)
  • python机器学习入门之opencv的使用(超详细,必看)

    源码及图片请点赞关注收藏后私信博主要  opencv 广泛用于多种于计算机视觉和机器学习相关的算法 其用C++语言编写 ,主要接口也是C++语言 但也有 python等环境的接口 接下来我们着重介绍他的使用。 opencv python是一个用于解决计算机视觉问题的python库  opencv python与numpy兼容 数

    2024年02月15日
    浏览(27)
  • OpenCv-Python学习笔记(九):形态学转换

    目录 腐蚀 膨胀 开运算 闭运算 形态学梯度 礼帽 黑帽 形态学操作的关系 构建椭圆/圆形的核 形态学操作是根据图像形状进行的简单操作。一般情况下对二值化图像进 行的操作。需要输入两个参数,一个是原始图像,第二个被称为结构化元素或 核,它是用来决定操作的性质的

    2024年02月05日
    浏览(33)
  • 计算机设计大赛 深度学习YOLO图像视频足球和人体检测 - python opencv

    🔥 优质竞赛项目系列,今天要分享的是 🚩 深度学习YOLO图像视频足球和人体检测 该项目较为新颖,适合作为竞赛课题方向,学长非常推荐! 🥇学长这里给一个题目综合评分(每项满分5分) 难度系数:3分 工作量:3分 创新点:5分 🧿 更多资料, 项目分享: https://gitee.com/dan

    2024年02月20日
    浏览(43)
  • 使用OpenCV与深度学习从视频和图像中精准识别人脸: Python实践指南

    第一部分: 引言与背景 人脸识别已经成为了当代技术领域中最热门和广泛应用的话题之一。从智能手机的解锁功能到机场的安全检查,人脸识别技术无处不在。在这篇文章中,我们将使用Python中的OpenCV库和深度学习模型,深入探讨如何从视频和图像中精确地识别人脸。 OpenC

    2024年02月12日
    浏览(36)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包