位置: 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(爱心代码图)

  • 苹果12mini屏幕多大尺寸(苹果12mini屏幕多少钱)

    苹果12mini屏幕多大尺寸(苹果12mini屏幕多少钱)

  • 华为nova5pro的卡槽在哪(华为nova5pro的卡槽位置在哪里)

    华为nova5pro的卡槽在哪(华为nova5pro的卡槽位置在哪里)

  • 墙内网线口怎么接线(墙内网线口怎么换)

    墙内网线口怎么接线(墙内网线口怎么换)

  • vivox9s忘记锁屏密码怎么解锁(vivox9s忘记锁屏密码怎么恢复出厂设置)

    vivox9s忘记锁屏密码怎么解锁(vivox9s忘记锁屏密码怎么恢复出厂设置)

  • 新手机出现补丁日期正常吗(新手机出现补丁好吧)

    新手机出现补丁日期正常吗(新手机出现补丁好吧)

  • 手机提示微信正在运行(手机提示微信正在使用融合卫星是什么意思)

    手机提示微信正在运行(手机提示微信正在使用融合卫星是什么意思)

  • 抖音开店保证金要多少(抖音开店保证金多少钱可以退吗)

    抖音开店保证金要多少(抖音开店保证金多少钱可以退吗)

  • qq巨轮能有几个(qq巨轮可以有多少个)

    qq巨轮能有几个(qq巨轮可以有多少个)

  • miui稳定版到开发版升级一般通过什么方式(MIUI稳定版到开发板)

    miui稳定版到开发版升级一般通过什么方式(MIUI稳定版到开发板)

  • 华为手机充电发热是什么原因(华为手机充电发烫怎么办一分钟搞定)

    华为手机充电发热是什么原因(华为手机充电发烫怎么办一分钟搞定)

  • 芒果tv会员最多能登录几个(芒果tv会员最多几人在线)

    芒果tv会员最多能登录几个(芒果tv会员最多几人在线)

  • 抖音可以设置不让别人搜到吗(抖音可以设置不让某个人看吗)

    抖音可以设置不让别人搜到吗(抖音可以设置不让某个人看吗)

  • b站动态审核要多久(b站动态审核中仅自己可见是原因)

    b站动态审核要多久(b站动态审核中仅自己可见是原因)

  • 路由器四个口哪个快(路由器四个口哪个信号好)

    路由器四个口哪个快(路由器四个口哪个信号好)

  • 手机为什么会突然震动(手机为什么会突然黑屏打不开)

    手机为什么会突然震动(手机为什么会突然黑屏打不开)

  • 华为nova6耗电快怎么解决(nove6耗电太快了)

    华为nova6耗电快怎么解决(nove6耗电太快了)

  • 华为荣耀8C录屏在哪(华为荣耀8c录屏功能在哪里设置)

    华为荣耀8C录屏在哪(华为荣耀8c录屏功能在哪里设置)

  • 美团消费账单怎么删除(美团消费账单在哪里看)

    美团消费账单怎么删除(美团消费账单在哪里看)

  • 怎样把小米震动关闭(小米手机震动方式)

    怎样把小米震动关闭(小米手机震动方式)

  • mate30全系支持5g吗(华为mate30支不支持5g网络)

    mate30全系支持5g吗(华为mate30支不支持5g网络)

  • fusionaccess如何联网(fusionaccess怎么连接网络教程)

    fusionaccess如何联网(fusionaccess怎么连接网络教程)

  • iphonex耳机口在哪(iohonex耳机孔)

    iphonex耳机口在哪(iohonex耳机孔)

  • cad怎么画斜线的垂直线(cad怎么画斜线的圆)

    cad怎么画斜线的垂直线(cad怎么画斜线的圆)

  • 荣耀v20开发者选项在哪里(荣耀v20开发者选项怎么关闭)

    荣耀v20开发者选项在哪里(荣耀v20开发者选项怎么关闭)

  • 阿尔萨斯的葡萄酒村,法国上莱茵省 (© Walter Bibikow/eStock Photo)(阿尔萨斯葡萄园)

    阿尔萨斯的葡萄酒村,法国上莱茵省 (© Walter Bibikow/eStock Photo)(阿尔萨斯葡萄园)

  • 企业所得税税前扣除管理办法
  • 转登记纳税人按规定再次登记为一般纳税人后
  • 缴纳所得税的账务处理
  • 生产成本怎么计算
  • 会计中级工作年限查得严么
  • 8000块电脑大概能跑多少分
  • 残保金税率是万元以下吗
  • 购房契税应该交给谁
  • 土地转让交哪些税种
  • 小规模纳税人减免税收政策
  • 承包租赁成本明细表的预算项目
  • 发票抬头写个人有效吗
  • 季报所得税可以预交吗
  • 开票超过离线时长怎么解决
  • 土地出让金缴纳契税计税依据
  • 公司注销了工程款还能转账吗
  • 一般纳税人交的增值税可以抵扣吗
  • 作业成本法的成本对象包括哪几个层次
  • 融资融券主要是哪些对象
  • 是否跨期
  • 在建工程如何评估价值
  • 脑部病毒感染什么症状
  • 如何使用u盘安装软件
  • 代收代付的垃圾清运费没发票能入账吗
  • linux怎么用gcc编译c程序
  • php 模拟post
  • 购买原材料的运输费计入什么科目
  • 再保险业务核算方法
  • 抵扣进项税额的几种情况是
  • 银行贷款每个月都要还吗?
  • 收到采购专用发票
  • 挂靠的项目怎么做账
  • 发行通告
  • 前端基础
  • flask框架入门
  • 实现php搜索框代码
  • discuz去除官方论坛
  • 研发支出放在资产负债表哪里
  • sql server 2008数据库
  • python正态分布采样
  • 购买增值税发票系统属于什么科目?
  • sql server基本知识
  • 小企业会计准则和一般企业会计准则的区别
  • 无形资产摊销怎么计算
  • 影响无形资产的营业利润怎么算
  • 跨月的普通发票怎么开红字发票
  • 没有计提坏账如何做账
  • 充油卡未收发票怎么办
  • 现金和银行存款的区别
  • 出口退税综合服务网
  • 成立教育培训司
  • 企业主要的工会是什么
  • 现金日记账的登记日期以什么日期为标准?
  • 编制合并财务报表的依据是纳入合并
  • 机票行程单可以抵扣进项税吗?
  • 什么是当期损益和其他综合收益
  • windows2008教程
  • linux中进程在运行时的基本状态
  • solaris vi命令
  • win8升win8.1
  • centos 命令行
  • win7系统播放器在哪
  • linux系统中怎么编辑文件
  • win8如何使用网页版的onedrive
  • win10文件资源
  • Windows10 Redstone首个预览版即将发布 开始推送全新的预览分支
  • win7共享文件夹设置访问权限
  • bootstrap-Treeview实现级联勾选
  • unity3d教学视频
  • shell脚本编程工具
  • nodejs yield
  • 很好的资源学习入口_android
  • Unity3D游戏开发引擎
  • node.js app
  • node解决了什么问题
  • shell脚本编写简单计算器
  • 北京市地方税务局2015第10号文件
  • 小微企业 2018
  • 2019小规模纳税人标准
  • 商品房开超市
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设