Python OpenCV视频文件相关操作教程

目录
  • 一、从文件中读取视频并播放
    • 1.创建读取视频的对象
    • 2.获取视频某些属性
    • 3.修改视频属性信息
    • 4.判断图像是否读取成功
    • 5.获取视频的一帧图像
    • 6.释放图像
  • 二、视频文件的保存
    • 1.在OpenCV中保存视频使用的是VedioWriter对象,创建视频写入对象
    • 2.设置视频的编解码器
    • 3.利用cap.read()获取视频中的每一帧图像,使用out.write()将某一帧图像写入视频中
    • 4.使用cap.release()和out.release()释放资源
  • 三、视频文件目标追踪
    • 1.meanshift算法:
    • 2>API
    • 3>主要流程
  • 总结

一、从文件中读取视频并播放

1.创建读取视频的对象

cap=cv.VideoCapture(filepath)

2.获取视频某些属性

retval=cap.get(propId)

propId:从0到18的数字,每个数字表示视频的属性

索引 flags 意义
0 cv2.CAP_ PROP_POS_MSEC 视频文件当前位置
1 cv2.CAP_PROP_POS_FRAMES 从0开始索引帧,帧位置
2 cv2.CAP_PROP_POS_AVI_RATIO 视频文件的相对位置(0表示开始,1表示结束)
3 cv2.CAP_PROP_FRAME_WIDTH 视频流的帧宽度
4 cv2.CAP_PROP_FRAME_HEIGHT 视频流的帧高度
5 cv2.CAP_PROP_FPS 帧率
6 cv2.CAP_PROP_FOURCC 编解码器四字符代码
7 cv2.CAP_PROP_FRAME_COUNT 视频文件的帧

3.修改视频属性信息

cap.set(propId,value)

4.判断图像是否读取成功

isornot=cap.isOpened()

5.获取视频的一帧图像

ret,frame=cap.read()

ret:获取成功返回True,失败返回False

frame:获取到的图像

注意:调用cv.imshow()显示图像时,要使用cv.waitkey()设置适当持续时间,通常设置25ms

6.释放图像

cap.release()

示例:

import numpy as np
import cv2 as cv
cap=cv.VideoCapture("video.mp4")
#判断是否获取成功
while(cap.isOpened()):
    #获取每一帧图像
    ret,frame=cap.read()
    #是否获取成功
    if ret == True:
        cv.imshow("frame",frame)
    if cv.waitKey(25)&0xFF==ord("q"):
        break;
cap.release()
cv.destoryAllWindows()

二、视频文件的保存

1.在OpenCV中保存视频使用的是VedioWriter对象,创建视频写入对象

out=cv.VideoWriter(filename,fourcc,fps,framesize)

fourcc:用四个字符表示的视频编码格式

fps:帧速率

framesize:每一帧的大小

2.设置视频的编解码器

retval=cv2.VideoWriter_fourcc(c1,c2,c3,c4)

c1~c4:视频编解码器的4字节代码,常用的有:

Windows:DIVX(.avi)

OS中:MJPG(.mp4),DIVX(.avi),X264(.mkv)

3.利用cap.read()获取视频中的每一帧图像,使用out.write()将某一帧图像写入视频中

4.使用cap.release()和out.release()释放资源

示例

import numpy as np
import cv2 as cv
#读取视频
cap=cv.VideoCapture("video.mp4")
width=int(cap.get(3))
height=int(cap.get(4))
out=cv.VideoWriter("out.avi",cv.VideoWriter_fourcc("M","J","P","G"),10,(width,height))
while(True):
    ret,frame=cap.read()
    if ret==True:
        out.write(frame)
    else:
        break
cap.release()
out.release()
cv.destroyAllWindows()

三、视频文件目标追踪

1.meanshift算法:

1>原理:通常情况,使用直方图反向投影方法将窗口移动到反向投影图像中灰度密度最大的区域

假设我们有张100x100的输入图像,有一张10x10的模板图像, 查找的过程:
1.从输入图像的左上角(0,0)开始,切割一块(0,0)至(10,10)的临时图像

2.生成临时图像的直方图
3.用临时图像的直方图和模板图像的直方图对比,对比结果记为c
4.直方图对比结果c,就是结果图像(0,0)处的像素值
5.切割输入图像从(0,1)至(10,11)的临时图像,对比直方图,并记录到结果图像

6.重复1~5步直到输入图像的右下角,就形成了直方图的反向投影

2>API

cv.meanshift(probImage,window,criteria)

probImage:ROI区域,即直方图的反向投影

window:初始搜索窗口,即定义ROI的rect

criteria:确定窗口搜索停止的准则,主要有迭代次数达到设置的最大值,窗口中心漂移值大于某个设定的限值

3>主要流程

1.读取视频文件: cv.VideoCapture0
2.感兴趣区域设置:获取第一帧图像,并设置目标区域,即感兴趣区域
3.计算直方图:计算感兴趣区域的HSV直方图,并进行归一化
4.目标追踪:设置窗口搜索停止条件,直方图反向投影,进行目标追踪,并在目标位置绘制矩形框。

示例

import numpy as np
import cv2 as cv
# 1.获取图像
cap=cv.VideoCapture('video.mp4')
#指定追踪目标
ret,frame=cap.read()
#行、高、列、宽
r,h,c,w=347, 301, 700, 308
win=(c,r,w,h)#追踪窗口为列行宽高
#追踪目标
roi = frame[r:r + h, c:c + w]
#计算直方图(HSV)
hsv_roi=cv.cvtColor(roi, cv.COLOR_BGR2HSV)
roi_hist=cv.calcHist([hsv_roi], [0], None, [180], [0, 180])
cv.normalize(roi_hist,roi_hist,0,255,cv.NORM_MINMAX)
# 4. 目标追踪,设置窗口搜索终止条件:最大迭代次数,窗口中心漂移最小值
term=(cv.TERM_CRITERIA_EPS|cv.TERM_CRITERIA_COUNT, 10, 1)
while (True):
    ret, frame=cap.read()
    if ret == True:
        #计算直方图的反向投影
        hsv=cv.cvtColor(frame, cv.COLOR_BGR2HSV)
        dst=cv.calcBackProject([hsv],[0],roi_hist,[0, 180],1)
        #进行meanshift追踪
        ret,win = cv.meanShift(dst,win,term)
        #追踪的位置绘制在视频上
        x,y,w,h=win
        img2 = cv.rectangle(frame, (x,y), (x+w, y+h), 255, 2)
        cv.imshow('frame',img2)
        if cv.waitKey(60) & 0xFF == ord('q'):
            break
    else:
        break
cap.release()
cv.destroyAllWindows()

总结

到此这篇关于Python OpenCV视频文件相关操作的文章就介绍到这了,更多相关OpenCV视频文件操作内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • python opencv 读取本地视频文件 修改ffmpeg的方法

    Python + opencv 读取视频的三种情况: 情况一:通过摄像头采集视频 情况二:通过本地视频文件获取视频 情况三:通过摄像头录制视频,再读取录制的视频 摄像头采集.本地视频文件的读取.写视频文件,网上都有代码. 我发现情况一和情况三都没有问题,大家注意读取自己通过摄像头录制的视频文件是没有问题的.但读取其他视频都会发现帧率为0(如果你获取视频的帧率并打印出来的话),并且退出读取.这时候读取是不成功的. 进去正题:如何解决读取视频失败的情况.这个问题很普遍,以至在官方教程的程序下面都提示

  • Python OpenCV对本地视频文件进行分帧保存的实例

    如下所示: # coding=utf-8 import os import cv2 videos_src_path = "/home/wgp/视频/" video_formats = [".MP4", ".MOV"] frames_save_path = "/home/wgp/视频/" width = 320 height = 240 time_interval = 50 def video2frame(video_src_p

  • OpenCV2从摄像头获取帧并写入视频文件的方法

    一段基于OpenCV2的代码. 作用是从摄像头获取帧并将帧写入指定的视频文件中. 需要注意的是,视频文件所在的路径需要存在,例如D:/images/1.avi.images这个目录需要存在.调用VideoWrite类对象的成员函数open时,编解码方式参数设置为-1,代码运行时会弹出对话框,手动选择编解码方式. #include<opencv2\highgui\highgui.hpp> #include<opencv2\imgproc\imgproc.hpp> #include&l

  • python使用openCV遍历文件夹里所有视频文件并保存成图片

    如果你在文件夹里有很多视频,并且文件夹里还有文件夹,文件夹里的文件夹也有视频,怎么能逐个读取并且保存..所以我写了个代码用了os,walk,这个可以遍历所有文件夹里的文件和文件夹 import os import cv2 cut_frame = 250 # 多少帧截一次,自己设置就行 save_path = "C:\文献与资料\手持红外\图片" for root, dirs, files in os.walk(r"C:\文献与资料\手持红外"): # 这里就填文件夹

  • Python OpenCV视频文件相关操作教程

    目录 一.从文件中读取视频并播放 1.创建读取视频的对象 2.获取视频某些属性 3.修改视频属性信息 4.判断图像是否读取成功 5.获取视频的一帧图像 6.释放图像 二.视频文件的保存 1.在OpenCV中保存视频使用的是VedioWriter对象,创建视频写入对象 2.设置视频的编解码器 3.利用cap.read()获取视频中的每一帧图像,使用out.write()将某一帧图像写入视频中 4.使用cap.release()和out.release()释放资源 三.视频文件目标追踪 1.mean

  • Python文件相关操作和方法汇总大全

    目录 os.path 文件 文件读写 文件删除 文件复制移动 目录 创建目录 删除目录 复制目录 枚举目录 遍历(游走)目录 文件名模式匹配 fnmatch glob 临时文件与目录 前言: Python中有多个内置模块来操作文件与目录(os.os.path.shutil.pathlib等等). os.path os.path模块主要用于获取文件的属性,包含以下几种常用方法: 路径操作: print(os.path.splitext('.info')) # ('.info', '') print

  • python爬虫beautifulsoup库使用操作教程全解(python爬虫基础入门)

    [python爬虫基础入门]系列是对python爬虫的一个入门练习实践,旨在用最浅显易懂的语言,总结最明了,最适合自己的方法,本人一直坚信,总结才会使人提高 1. BeautifulSoup库简介 BeautifulSoup库在python中被美其名为"靓汤",它和和 lxml 一样也是一个HTML/XML的解析器,主要的功能也是如何解析和提取 HTML/XML 数据.BeautifulSoup支持Python标准库中的HTML解析器,还支持一些第三方的解析器,若在没用安装此库的情况下

  • Python OpenCV实现识别信用卡号教程详解

    目录 通过与 OpenCV 模板匹配的 OCR 信用卡 OCR 结果 总结 今天的博文分为三个部分. 在第一部分中,我们将讨论 OCR-A 字体,这是一种专为辅助光学字符识别算法而创建的字体. 然后我们将设计一种计算机视觉和图像处理算法,它可以: 本地化信用卡上的四组四位数字. 提取这四个分组中的每一个,然后单独分割 16 个数字中的每一个. 使用模板匹配和 OCR-A 字体识别 16 个信用卡数字中的每一个. 最后,我们将看一些将信用卡 OCR 算法应用于实际图像的示例. 通过与 OpenCV

  • python对json的相关操作实例详解

    本文实例分析了python对json的相关操作.分享给大家供大家参考,具体如下: 什么是json: JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式.易于人阅读和编写.同时也易于机器解析和生成.它基于JavaScript Programming Language, Standard ECMA-262 3rd Edition - December 1999的一个子集.JSON采用完全独立于语言的文本格式,但是也使用了类似于C语言家族的习惯(包括C, C+

  • Python开发SQLite3数据库相关操作详解【连接,查询,插入,更新,删除,关闭等】

    本文实例讲述了Python开发SQLite3数据库相关操作.分享给大家供大家参考,具体如下: '''SQLite数据库是一款非常小巧的嵌入式开源数据库软件,也就是说 没有独立的维护进程,所有的维护都来自于程序本身. 在python中,使用sqlite3创建数据库的连接,当我们指定的数据库文件不存在的时候 连接对象会自动创建数据库文件:如果数据库文件已经存在,则连接对象不会再创建 数据库文件,而是直接打开该数据库文件. 连接对象可以是硬盘上面的数据库文件,也可以是建立在内存中的,在内存中的数据库

  • Android播放assets文件里视频文件相关问题分析

    本文实例讲述了Android播放assets文件里视频文件相关问题.分享给大家供大家参考,具体如下: 今天做了一个功能,就是播放项目工程里面的视频文件,不是播放SD卡视频文件. 我开始尝试把视频文件放到 assets文件目录下. 因为之前写webview加载assets文件夹时,是这样写的: webView = new WebView(this); webView.loadUrl(file:///android_asset/sample3_8.html); 依次类推,我尝试将视频video.3g

  • Python编程之string相关操作实例详解

    本文实例讲述了Python编程之string相关操作.分享给大家供大家参考,具体如下: #coding=utf8 ''''' 字符串是Python中最常见的类型.可以通过引号见包含字符的方式创建. Python里面单引号和双引号的作用是相同的. 字符串是不可变类型,就是说改变一个字符串的元素需要新建一个新的字符串. 字符串是由独立的字符组成,并且这些字符可以通过切片操作顺序地访问. ''' class StringClass(object): ''''' 创建一个字符串就像使用一个标量一样简单.

  • Python OpenCV视频截取并保存实现代码

    这篇文章主要介绍了Python OpenCV视频截取并保存实现代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 在图像处理之前,我们需要对拿到手的数据进行筛选,对于视频,我们需要从中截取我们需要的一段或几段 整体思路比较简单,通过设定截取视频的起止时间(帧数),可以将该时间段内的图像保存为新的视频 直接上代码 """ [函数名称] 截取视频 [参数] 输入参数 视频文件名称 [详细介绍] 输入不同时间段 进行截取拼接 [创

  • 使用python对视频文件分辨率进行分组的实例代码

    在平时的工作中,我们的目录有很多的视频文件,如果你没有一个好的视频分类习惯,在找视频素材的时候会很费时,通过对视频的分辨路进行分类可以在需要的时候快速找到你想要的视频分辨率.当然人工去分类是一种比较费时费力的工作,通过软件也好,程序也罢都是为了可以提高我们的工作效率. 代码分享 import os import subprocess import json import shutil import datetime def get_files(file_dir): for root, dirs,

随机推荐