opencv基本操作二(读取视频流与保存视频、读取摄像头并保存视频)

这篇具有很好参考价值的文章主要介绍了opencv基本操作二(读取视频流与保存视频、读取摄像头并保存视频)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

要点

  • opencv常用读视频函数 cv2.VideoCapturecv2.VideoCapture.get 等,可以参考这里
  • opencv常用写视频函数 cv2.VideoWriter 等可以参考这里 ,其中视频格式可以参考这里
  • videoCapture.read() 是按帧读取视频,ret,frame 是获 .read() 方法的两个返回值。其中 ret 是布尔值,如果读取帧是正确的则返回True,如果文件读取到结尾,它的返回值就为False。frame 就是每一帧的图像,是个三维矩阵。
  • 可以使用 cv2.putText 来添加文字,具体参数可以参考这里

代码

例程一

  • 本例程将读取一个视频,并个视频加上流动水印后保存为一个新视频。
import cv2

#读取视频并获取视频帧率、分辨率、总帧数
VideoCapture = cv2.VideoCapture("VideoExample.mp4")
fps = VideoCapture.get(cv2.CAP_PROP_FPS)
size = (int(VideoCapture.get(cv2.CAP_PROP_FRAME_WIDTH)),
        int(VideoCapture.get(cv2.CAP_PROP_FRAME_HEIGHT)))
totalFrames = int(VideoCapture.get(7))

#创建新视频
ViideoWrite = cv2.VideoWriter("VideoWriterExample.avi",cv2.VideoWriter_fourcc('I','4','2','0'),
                              fps,size)

x=10 #水印坐标
y=10 #水印坐标
i=1
step_x=5
step_y=5

success,frame = VideoCapture.read() #读取视频第一帧
print("第"+str(i)+"帧, 共"+str(totalFrames)+"帧")
while success:
        cv2.waitKey(1)
        # 给图片添加水印
        cv2.putText(frame,'hello,opencv',(x,y),cv2.FONT_HERSHEY_SIMPLEX,1,(255,0,0),3)
        cv2.imshow("frame",frame)
        ViideoWrite.write(frame) #给新视频添加新帧

        # 水印坐标变化
        if(x>size[0]):step_x=-5
        if(x<0):step_x=5
        if(y>size[1]):step_y=-5
        if(y<0):step_y=5
        x += step_x
        y += step_y
        success,frame = VideoCapture.read()
        i += 1
        print("第"+str(i)+"帧, 共"+str(totalFrames)+"帧")

print ('Quitted!') #提示程序已停止
cv2.destroyAllWindows() #程序停止前关闭所有窗口

例程二

  • 本例程将读取并显示摄像头图像,在图像窗口按下按键“S”将开始录制摄像头视频,按下按键“X”将停止录制摄像头视频,按下按键“Q”将停止程序。
import cv2

#读取视频并获取视频帧率、分辨率
cameraCapture  = cv2.VideoCapture(0)
fps = cameraCapture .get(5)
size = (int(cameraCapture .get(cv2.CAP_PROP_FRAME_WIDTH)),int(cameraCapture .get(cv2.CAP_PROP_FRAME_HEIGHT)),)


#创建新视频
cameraWriter = cv2.VideoWriter("CameraExample.avi",cv2.VideoWriter_fourcc('I','4','2','0'),fps,size)


x=10 #水印坐标
y=10 #水印坐标
i=1
step_x=5
step_y=5

#读取视频第一帧
success,frame = cameraCapture.read()


#提示停止方法
print ('Showing camera. Press key "Q" to quit.')
print ('Press key "S" to start recording.')
Quit=1 #是否继续运行标志位
Record=0 #录制视频标志位

while success and Quit:
    keycode=cv2.waitKey(1)
    if keycode & 0xFF == ord('q'): #如果按下“Q”键,停止运行标志位置1,跳出while循环,程序停止运行
        Quit = 0
    if keycode & 0xFF == ord('s'): #如果按下“S”键,开始录制摄像头视频
        Record = 1
    if keycode & 0xFF == ord('x'): #如果按下“X”键,停止录制摄像头视频
        Record = 0

    if Record:

        # 给图片添加水印
        cv2.putText(frame,'hello,opencv',(x,y),cv2.FONT_HERSHEY_SIMPLEX,3,(0,255,255),3)
        cameraWriter.write(frame)# 给新视频添加新帧
        # 水印坐标变化
        if x > size[0]:
            step_x = -5
        if x < 0:
            step_x = 5
        if y > size[1]:
            step_y = -5
        if y < 0:
            step_y = 5
        x += step_x
        y += step_y
        print("第" + str(i) + "帧,")
        i = i + 1
        print('Press key "X" to end recording.')
        print("\n\t")

    cv2.imshow('frame',frame)
    success,frame = cameraCapture.read() # 逐帧读取视频

if success == 0: #提示由于摄像头读取失败停止程序
    print ('Camera disconnect !')
print('Quitted!')  # 提示程序已停止
#释放摄像头
cameraCapture.release()
#程序停止前关闭所有窗口
cv2.destroyAllWindows()

文章来源地址https://www.toymoban.com/news/detail-402398.html

到了这里,关于opencv基本操作二(读取视频流与保存视频、读取摄像头并保存视频)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • 【精选】基于OpenCV的实时视频流车牌识别(源码&教程)

    近年来,智能交通系统(ITS)在我国应用日益广泛。作为ITS重要组成部分的自动车牌识别系统在交通流量检测、交通诱导控制、违章车辆监控等方面有着广泛的应用,是确保道路安全畅通的重要手段,也为统计有关资料,为管理者决策提供有效数字依据的重要途径。由于一般的识别系

    2024年01月23日
    浏览(64)
  • OpenCV基本操(IO操作,读取、显示、保存)

    参数: 要读取的图像 读取图像的方式: cv.IMREAD*COLOR :以彩色模式加载图像,任何图像的图像的透明度都将被忽略。这是默认参数 标志: 1 cv.IMREAD*GRAYSCALE :以灰度模式加载图像 标志: 0 cv.IMREAD_UNCHANGED :包括alpha通道(透明通道)的加载图像模式。 标志: -1 可以使用 1、0或者

    2024年02月10日
    浏览(68)
  • RTSP视频流相关的一些操作

    端口554在网络通信中用于Real Time Streaming Protocol(RTSP)。 尝试使用 v4l2 去解码 https://gstreamer.freedesktop.org/documentation/tutorials/playback/hardware-accelerated-video-decoding.html?gi-language=c https://github.com/uutzinger/camera/blob/master/RTSP_RTP_gstreamer.md Ubuntu18.04 x86-64 使用 rtsp 流去做推理 nnstreamer_example_obj

    2024年02月12日
    浏览(54)
  • 基于OpenCv+Django的网络实时视频流传输(前后端分离)

    秋风阁——北溪入江流:https://focus-wind.com/ 秋风阁——基于OpenCv+Django的网络实时视频流传输(前后端分离) 使用OpenCv捕获摄像机画面后,我们有时候需要将画面显示在界面上。本博客基于Django的前后端分离模式,将视频流从后端读取,传送给前端显示。 在使用Django进行视频

    2024年02月08日
    浏览(53)
  • 树莓派学习:学习opencv+用opencv获取树莓派mjpg摄像头视频流

    目录 前提步骤 打开树莓派摄像头 查看是否有图像,登录游览器打开树莓派IP地址的8080端口 获取mjpg的视频流url 代码 先设定好mjpg的视频流的url 利用opencv库中的v2.VideoCapture类读取mjpg视频流   cv2.VideoCapture() 检查摄像头是否成功打开,如果没有,则打印错误消息并退出程序 

    2024年02月03日
    浏览(60)
  • 一种在 Python 中实现更快 OpenCV 视频流的多线程方法

    概述 在本文中,我们将看到两个没有多线程的 Python 代码示例,用于从摄像头读取视频帧。我们将看到使用/不使用多线程获得的 FPS 的差异。 什么是多线程? 线程是进程中的一个执行单元。多线程是指通过在线程之间快速切换对 CPU 的控制(称为上下文切换)来并发执行多个

    2024年02月16日
    浏览(57)
  • VS+QT+Opencv使用YOLOv4对视频流进行目标检测

    对单张图像的检测,请参考:https://blog.csdn.net/qq_45445740/article/details/109659938

    2024年02月12日
    浏览(55)
  • 使用Flask+OpenCV实现浏览器/微信小程序的视频流传输

    前言 一、 Flask+浏览器实现 二、 Flask+微信小程序实现 三、Flask+uni-app小程序实现 后记 近期在做的东西涉及到实时视频的处理,碰到一些问题,因此将之记录下来,便于日后翻看,同时也希望能给遇到同样问题的小伙伴提供帮助。 实现代码如下: 分为 app.py 和index.html。 1. F

    2024年02月06日
    浏览(76)
  • WSL2通过OpenCV调用并展示本机摄像头的RTSP视频流

    本篇博客的由来如上图哈哈,WSL2 相关安装教程可以参考我之前的博客:Win11安装WSL2和Nvidia驱动 更多文章欢迎来我的博客小站看呀,会有更多的技术细节~ ubuntu上请执行 或者编译安装 如果报错 Could NOT find OpenSSL ,安装如下依赖即可解决 下载解压 EasyDarwin Easydarwin是国内团队开

    2024年02月09日
    浏览(77)
  • 【jetson 硬解码】使用NVDEC模块解码rtsp视频流,超低时延、比opencv更快、资源更少

    1、jetson系统:32.7.1, 2、jetpack:4.6.1, 3、deepstream:6.0.1, FastDeploy 问题1:

    2024年02月14日
    浏览(102)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包