位置: IT常识 - 正文

OpenCV笔记:cv2.VideoCapture 完成视频的跳帧输出操作(cv2.error:opencv(3.4.2))

编辑:rootadmin
OpenCV笔记:cv2.VideoCapture 完成视频的跳帧输出操作

背景

推荐整理分享OpenCV笔记:cv2.VideoCapture 完成视频的跳帧输出操作(cv2.error:opencv(3.4.2)),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:opencv import cv2,opencv cvfindcontours,opencv cv_fourcc,cv2.error:opencv(3.4.2),opencv cv_fourcc,opencv cv.h,opencv cvui,opencv cv.h,内容如对您有帮助,希望把文章链接给更多的朋友!

        我开始关注这个问题,是在使用 PaddleOCR + OpenCV 进行视频文字识别的时候,因为OpenCV 需要循环读取视频的每一帧进行解析,这就导致视频播放特别卡顿。由于视频中相邻帧的内容是一样的,重复识别也没有意义,所以我就在考虑:有没有办法跳帧输出?

        咱们能想到的所有问题,都已经被设计师考虑过了,需要用到下面两个函数:

cv2.VideoCapture.grab()cv2.VideoCapture.get()

        你可能需要用到的文章:

关于:Python基础,爬虫,机器学习,常见异常和面试【篇】(专题汇总)正文一、核心方法1. cv2.VideoCapture.grab() 函数# 视屏获取,videoPath为视频的路径cap = cv2.VideoCapture(videoPath)# 往下读一帧ret,并返回图片信息frameret, frame = cap.read()# 只往下读一帧retret = cap.grad()read()函数,输出的是两个参数:第一个参数 ret 为 True 或 False,代表有没有读取下一到帧图片;第二个参数 frame,表示读到的一帧图片的信息,OCR就是对 frame 进行识别处理。 grad()函数,输出的是一个参数:ret 为 True 或 False,代表有没有读取下一到帧图片。

        从上面的对比可以看出来,grab() 仅仅是用来指向下一帧,并没有返回多余的图片信息,当不需要解析图片的时候,grab() 函数显然效率更高,更合适。

2. cv2.VideoCapture.get() 函数OpenCV笔记:cv2.VideoCapture 完成视频的跳帧输出操作(cv2.error:opencv(3.4.2))

        cv2.VideoCapture.get(n) ,n 的范围是 0~7,这个方法可以帮助我们获取视频的属性。其中我们用到的就是 get(1) - 获取视频当前帧,可以方便我们做跳帧操作。

        总结了一下:

方法含义cv2.VideoCapture.get(0)视频文件的当前位置(播放)以毫秒为单位cv2.VideoCapture.get(1)当前帧,基于以0开始的被捕获或解码的帧索引cv2.VideoCapture.get(2)视频文件的相对位置(播放):0 = 电影开始,1 = 影片的结尾。cv2.VideoCapture.get(3)在视频流的帧的宽度cv2.VideoCapture.get(4)在视频流的帧的高度cv2.VideoCapture.get(5)帧率cv2.VideoCapture.get(6)编解码的4字 - 字符代码cv2.VideoCapture.get(7)视频文件中的帧数

        除此之外,还可以用另外几个方法获取视频属性:

cv2.VideoCapture.get(cv2.CAP_PROP_FPS):获取帧率;cv2.VideoCapture.get(cv2.CAP_PROP_FRAME_COUNT):获取视频时长,单位- 秒。二、实战练习1. 代码展示

        我这里设置的是每间隔10帧输出一次,大家可以根据自己的需要设置,代码如下:

get(1) 获取当前帧率跳帧# _*_coding:utf-8_*_# 作者: Java Punk# 时间: 2022-10-09 14:49:45# 功能: 场景文字识别import cv2from paddleocr import PaddleOCR, draw_ocrfrom PIL import Imageimport numpy as npdef ch_match(videoPath): ocr = PaddleOCR(use_angle_cls=True, lang="ch") # 视屏获取 cap = cv2.VideoCapture(videoPath) # 判断是否正常打开 ret = cap.isOpened() # 循环读取视频帧 while ret: # 获取当前视频帧位置 now_fps = cap.get(1) # 设置每 10 帧输出一次 if (now_fps % 10 != 0): # 跳帧 ret = cap.grab() continue print("———————————————————— read fps", now_fps) # 是否截取到图片;图片信息 ret, frame = cap.read() # 对返回的图片进行文字识别 result = ocr.ocr(frame, cls=True, rec=True) boxes = [line[0] for line in result] txts = [line[1][0] for line in result] scores = [line[1][1] for line in result] # simsun.ttc 是一款很常见、实用的电脑字体,这里作为识别的模板 im_show = draw_ocr(frame, boxes, txts, scores, font_path='../fonts/SIMSUN.TTC') im_show = Image.fromarray(im_show) tp_img = np.asarray(im_show) cv2.imshow('tp_img', tp_img) cv2.waitKey(1) pass cv2.waitKey(0) cv2.destroyAllWindows() passif __name__ == '__main__': print("———————————————————— start ————————————————————\n") # 图片路径自己设置,下面是我本地的路径,记得替换!!! ch_match('../img/yz_words/vlog_zxyw_02.mp4') print("———————————————————— end ————————————————————\n")

改动一下:记录帧率进行跳帧

       实际上每一次视频的 while 循环,都是往下走了一帧,所以我们也可以取巧的利用 i++ 进行跳帧,此时 i = cv2.VideoCapture.get(1)。

... # 视频帧计数 timeC = 0 # 循环读取视频帧 while ret: timeC = timeC + 1 # 每隔 10 帧进行操作 if (timeC % 10 != 0): ret = cap.grab() continue ...2. 效果展示

        感兴趣的小伙伴可以把跳帧部分的代码去掉看看效果,对比一下,说下我用公司电脑测试的结果:

执行跳帧前:原视频时长7s,最后 cv2.imshow() 时长 2min;执行跳帧后:原视频时长7s,最后 cv2.imshow() 时长 20s;

下面是“执行跳帧后”的效果(由于上传大小限制,无奈只能降低画质):

本文链接地址:https://www.jiuchutong.com/zhishi/298464.html 转载请保留说明!

上一篇:Vue项目实战 —— 后台管理系统( pc端 ) —— Pro最终版本(vue3.0实战项目)

下一篇:爱心代码李峋同款爱心 python html(爱心代码图)

  • 苹果13支持nfc门禁卡吗(苹果13支持nfc功能)

    苹果13支持nfc门禁卡吗(苹果13支持nfc功能)

  • 苹果11手机悬浮球在哪里设置关闭(苹果11手机悬浮球怎么设置)

    苹果11手机悬浮球在哪里设置关闭(苹果11手机悬浮球怎么设置)

  • 华为盲人模式如何关闭(华为盲人模式如何)

    华为盲人模式如何关闭(华为盲人模式如何)

  • 同一个id怎么取消共享通讯录(同一个id怎么取消同步下载软件)

    同一个id怎么取消共享通讯录(同一个id怎么取消同步下载软件)

  • 苹果手机内容如何导入新苹果机(苹果手机内容如何导入u盘)

    苹果手机内容如何导入新苹果机(苹果手机内容如何导入u盘)

  • 快手怎么关闭水印设置(快手怎么关闭水印设置新版本)

    快手怎么关闭水印设置(快手怎么关闭水印设置新版本)

  • 电脑平均值公式怎么用(电脑平均值公式怎么算)

    电脑平均值公式怎么用(电脑平均值公式怎么算)

  • 字节跳动一面后没回应?(字节跳动一面后让等通知)

    字节跳动一面后没回应?(字节跳动一面后让等通知)

  • MIUI11锁屏不显示信息内容(miui11怎么设置锁屏不显示消息内容)

    MIUI11锁屏不显示信息内容(miui11怎么设置锁屏不显示消息内容)

  • 卡坏了怎么查服务密码(卡坏了怎样才找回电话号码)

    卡坏了怎么查服务密码(卡坏了怎样才找回电话号码)

  • 小米快应用服务框架是什么东西(小米快应用服务框架怎么关闭)

    小米快应用服务框架是什么东西(小米快应用服务框架怎么关闭)

  • 微信擦汗表情什么意思(微信里擦汗的表情)

    微信擦汗表情什么意思(微信里擦汗的表情)

  • 7p8p手机壳通用吗(7p的手机壳)

    7p8p手机壳通用吗(7p的手机壳)

  • 如何调闹钟铃声大小(如何调闹钟铃声音量)

    如何调闹钟铃声大小(如何调闹钟铃声音量)

  • 手机关机后有辐射吗(手机关机后辐射会小吗)

    手机关机后有辐射吗(手机关机后辐射会小吗)

  • 华为nova5pro怎么区域截屏(华为nova5pro怎么分屏)

    华为nova5pro怎么区域截屏(华为nova5pro怎么分屏)

  • 华为有三维触控吗(华为三维触控在哪打开)

    华为有三维触控吗(华为三维触控在哪打开)

  • mt6755相当于高通哪款(mtkmt6755相当于骁龙多少)

    mt6755相当于高通哪款(mtkmt6755相当于骁龙多少)

  • 手机新闻资讯怎么删除(手机新闻在哪里)

    手机新闻资讯怎么删除(手机新闻在哪里)

  • 华为手机上出现hd怎么关(华为手机上出现了一个圆圈怎么关闭)

    华为手机上出现hd怎么关(华为手机上出现了一个圆圈怎么关闭)

  • 怎么清理airpods(怎么清理airpods里面的耳屎)

    怎么清理airpods(怎么清理airpods里面的耳屎)

  • 科罗拉多斯普林斯的上帝公园,科罗拉多州 (© lightphoto/iStock/Getty Images)(科罗拉多斯普林斯海拔)

    科罗拉多斯普林斯的上帝公园,科罗拉多州 (© lightphoto/iStock/Getty Images)(科罗拉多斯普林斯海拔)

  • CCF-CSP真题《202212-2 训练计划》思路+python,c++满分题解(2020ccf csp报名和考试时间)

    CCF-CSP真题《202212-2 训练计划》思路+python,c++满分题解(2020ccf csp报名和考试时间)

  • 启用新账簿时,应填写
  • 哪些情况需要提高警惕小心毒品
  • 评估增值对净利有影响吗
  • 补缴以前年度房产税以及滞纳金
  • 固定资产一次性扣除账务处理
  • 小规模纳税人税控系统
  • 银行汇票用什么账户核算
  • 年报现金流量表可以不填吗
  • 聘用退休员工
  • 税收滞纳金可以免除吗
  • 一般存款账户的主要用途
  • 利润分配包括缴纳所得税吗
  • 收到托收凭证怎么填写
  • 以前年度多计成本,本年度冲减成本
  • 年底员工借款如何处理
  • 购买预付油卡的账务处理
  • 医药酒精现在要兑水喝吗
  • 增值税专用发票几个点
  • 建筑公司收到工程服务发票怎么做会计分录
  • 调离工作岗位是什么处分
  • 小规模纳税人开专票
  • 增值税专用发票跨月退回怎么办?
  • 倒增值税发票过程
  • 购买方红字信息表开具流程图
  • 对公提回贷算收入吗
  • 自建自用建筑物,其自建行为不是建筑业税目的征税范围
  • 工伤补偿需要缴税吗
  • 出口货物退货流程
  • 无形资产入账摊销
  • 企业招聘费用计算公式
  • 会计跨年业务的处理
  • 政府扶持资金要交所得税吗
  • 开具给个人的发票哪里查询
  • 指定的网络名不再可用 共享打印机00x0000040
  • 多付货款退回的法律依据
  • 该内存不能为read怎么解决?win+r弹不出来也不好使
  • 不动产进项税额转出计算公式
  • 发票真伪查询的金额填多少
  • 三防手机厂商
  • 应收票据贴现的性质是什么
  • 银行贷款用途能改吗
  • php中的pdo
  • django pypi
  • 残保金怎么核算
  • 电子税务局附加税退税在哪看
  • tsop封装
  • 采购货未到收到发票
  • 买汽车配件属于什么服务
  • 资产负债表和现金流量表之间的勾稽关系
  • 住宿费当月抵扣吗
  • 6%税点是什么意思
  • 补缴的土地价款怎么算费用
  • 融资租赁开什么发票
  • 个体户营业额超了怎么办
  • 融资租赁租金利息怎么算
  • 汽车以租代售合法吗
  • 银行扣款后又退回怎么办
  • 学校收到政府补助的会计分录
  • 外贸出口退税政策
  • 免税收入和征税收入怎么做账
  • 农业生产成本核算方法
  • 库存现金的主要内容有哪些
  • 企业债与公司债的还款有区别
  • ac1st19.dll
  • w10看不到我的电脑
  • centos screen命令
  • info.exe是什么病毒
  • win8怎么删除所有东西
  • unity总结
  • python三角形角度
  • 管道的实现
  • python中用input()函数接收到的数据为
  • 教学实例分析怎么写
  • 用python编写
  • js图形界面
  • js面向对象写法
  • 进出口贸易产品种类
  • 为什么有的企业在企查查上查不到
  • 营业执照每个季度申报吗
  • 养猪环保局有什么新政策
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设