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

  • 常用网络营销推广方案(常用网络营销推广方法有哪些)

    常用网络营销推广方案(常用网络营销推广方法有哪些)

  • iphone13mini怎么换壁纸(iphone13mini换购)

    iphone13mini怎么换壁纸(iphone13mini换购)

  • 微信被对方拉黑是什么显示(微信被对方拉黑删除教你一招挽回)

    微信被对方拉黑是什么显示(微信被对方拉黑删除教你一招挽回)

  • ios15.3可以戴口罩解锁吗(ios14.5可以戴口罩支付吗)

    ios15.3可以戴口罩解锁吗(ios14.5可以戴口罩支付吗)

  • oppofindx2pro能支持暗色模式吗(oppofindx2pro可以用充电宝吗)

    oppofindx2pro能支持暗色模式吗(oppofindx2pro可以用充电宝吗)

  • 显示器蓝屏是怎么回事(显示器蓝屏怎么办)

    显示器蓝屏是怎么回事(显示器蓝屏怎么办)

  • 微信怎么看红包发了多少(微信怎么看红包记录和转账记录)

    微信怎么看红包发了多少(微信怎么看红包记录和转账记录)

  • 华为mate30pro新手机第一次充电多长时间(华为mate30pro新手机多少钱)

    华为mate30pro新手机第一次充电多长时间(华为mate30pro新手机多少钱)

  • qq小海螺是什么(网络小海螺是什么意思)

    qq小海螺是什么(网络小海螺是什么意思)

  • 三星s20ultra国行和韩版区别(三星s20ultra国行和港版区别)

    三星s20ultra国行和韩版区别(三星s20ultra国行和港版区别)

  • 苹果5s为啥不能用4g(苹果5s为啥不能玩金铲铲)

    苹果5s为啥不能用4g(苹果5s为啥不能玩金铲铲)

  • 京东全面保障需要买吗(京东的全面保障包含碎屏么)

    京东全面保障需要买吗(京东的全面保障包含碎屏么)

  • 小米cc9e支持27w快充吗(小米cc9e支持nfc吗)

    小米cc9e支持27w快充吗(小米cc9e支持nfc吗)

  • 手机地图怎么测距离(手机地图怎么测速)

    手机地图怎么测距离(手机地图怎么测速)

  • word怎么输入圆圈数字(word怎么输入圆圈里面带字母)

    word怎么输入圆圈数字(word怎么输入圆圈里面带字母)

  • 乐视手机联系人怎么导入sim卡(乐视手机联系人不见了)

    乐视手机联系人怎么导入sim卡(乐视手机联系人不见了)

  • qq被冻结7天怎么立即恢复(qq被冻结7天怎么强制解冻)

    qq被冻结7天怎么立即恢复(qq被冻结7天怎么强制解冻)

  • 拼多多哪个公司开发的(拼多多哪个公司上门取件)

    拼多多哪个公司开发的(拼多多哪个公司上门取件)

  • 打电话短信呼什么意思(打电话短信呼是怎么回事)

    打电话短信呼什么意思(打电话短信呼是怎么回事)

  • 短信怎么退出亲情号码(短信怎么退出亲情号)

    短信怎么退出亲情号码(短信怎么退出亲情号)

  • vivox27人脸解锁在哪设置(vivo手机人脸解锁)

    vivox27人脸解锁在哪设置(vivo手机人脸解锁)

  • qq留言怎么隐藏(qq留言怎么隐藏手机型号)

    qq留言怎么隐藏(qq留言怎么隐藏手机型号)

  • 显示器灰屏自修方法(显示器灰屏自修理多少钱)

    显示器灰屏自修方法(显示器灰屏自修理多少钱)

  • 小微企业所得税费用怎么算
  • 房屋赠与双方办理流程
  • 补缴关税税率
  • 收到以前年度银行手续费发票
  • 小规模开专票的条件
  • 个体户核定双定户是否可以年度汇算清缴
  • 自然人税收系统生产经营怎么申报
  • 有哪些税收政策类型
  • 转出未交增值税和转出多交增值税
  • 技术服务费属于现代服务吗
  • 买材料的仓储费会计分录
  • 公司购买销售材料怎么写会计分录?
  • 企业员工无偿使用合法吗
  • 进项发票可以不入账吗
  • 核定征收的企业需要汇算清缴吗
  • 发票的审核之真假发票的查验
  • 财政返还政策
  • 关于补充养老保险
  • 工会经费人数在哪里查询
  • 企业交残疾人基金会计分录怎么做
  • 上月开的销项专票如何做废?
  • 汇款退回重新汇到银行卡
  • 税法对弥补亏损的规定是什么?
  • 研发费用加计扣除是什么意思啊
  • 食堂伙食费需要开票吗
  • 财付通转款会计分录
  • 其它权益工具投资处置时其他综合收益转那
  • 月末库存商品怎么记账
  • 增值税要不要计入固定资产的成本中?
  • 暂估收入入账冲回如何会计分录
  • 应税消费品对外出售
  • 如何制作win7系统u盘安装盘
  • 自建房买卖需要缴哪些费用
  • 销售方收到购买方的红字信息表
  • 企业销售旧固定资产税率
  • thinkphp smarty
  • 工商年报纳税总额包括滞纳金吗
  • thinkphp3.2.3
  • php方法重载
  • 用php生成一个txt文件
  • conda配置虚拟环境
  • web前端修炼之道
  • 针对多用户实现什么功能
  • 金融企业贷款损失
  • 关于幼儿园国培的要求和建议
  • 到对公账户的钱能立马转出去吗
  • 顺丰电子发票开票失败需要怎么处理?
  • 长期借款的处理原则
  • 电子产品报废清理是否缴纳教育附加税
  • 抵账的多余款是什么科目
  • 跨国公司海外子公司
  • mysql备份原理
  • 印花税怎么计提记账
  • 购买火车票报销,实际没乘车能查到嘛
  • 资产减值损失的定义
  • 对公转账房租如何填写备注
  • 没有发票的费用怎么报销
  • 递延所得税资产和负债怎么理解
  • 定货还是订货
  • 私人出租房子发圈文案
  • 业务招待费可以开专票抵扣吗
  • 给客户减免的货款怎么做账
  • 企业间借款利息最新规定
  • 转卖增值税犯罪吗
  • 业务招待费包含样品费吗
  • 企业为职工购买互助保障项目经费可以有什么开支
  • 办公用水电费计入什么科目
  • mysql索引优化是什么意思
  • 关于sql的几道小知识
  • 两台电脑如何共享网络
  • win7 运行慢
  • window8任务管理器
  • 在Linux系统中如果想移出已安装的软件
  • cocos creator截图
  • 导演都有什么分类
  • excel f9刷新
  • opengl shader实例
  • 简述javascript的常用控制结构
  • js引用传递
  • python发送信息到微信
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设