问题描述:关键帧提取后,将会得一序列关键帧的帧号,然后需要把这些帧保存起来,以便于浏览和管理.

通过opencv里的VideoCapture的函数set(CV_CAP_PROP_POS_FRAMES,nextFrameNumber),定位到具体的帧号,但最终读取的并不是对应帧的图像.

问题出现的原因:

Opencv底层是通过ffmpeg读取视频.其中定位主要用av_seek_frame()来定位frame的位置.

int av_seek_frame(AVFormatContext *s,int stream_index,int64_t timestamp,int flags)其中最后一个参数有

AVSEEK_FLAG_BACKWARD = 1 // seek backward

AVSEEK_FLAG_BYTE = 2 // seeking based on position in bytes

AVSEEK_FLAG_ANY = 4 // seek to any frame,even non key-frames.

ffmpeg默认的是选取关键帧,opencv里面这个函数的参数flag是0.

因而,进行定位时,若下一帧不是关键帧,进行读取时会出跳跃现象.

将参数改为AVSEEK_FLAG_ANY,虽然可以解决跳跃现象,读取任何帧图像.

但是将会出现花屏现象,因为帧图像解码是需要利用关键帧的图像进行帧间的解码,

若读取帧图像时,其对应关键帧没有被读取解码,将只会对该帧进行帧内解码得到花屏图像.

如何才能解决跳跃现象,但不产生花屏图像?

解决思路:读取下一帧号最相近且前面的关键帧,然后一帧帧的读取视频,直到读到下一帧的帧号为止.

将Opencv2.3.1里面的cap_ffmpeg_impl.cpp里面bool CvCapture_FFMPEG::setProperty( int property_id, double value )函数改成如下实现方式,

即可达到准确定位的效果.

【OpenCV学习】准确定位帧相关推荐

  1. 实现opencv在图片上画框准确定位某个主体

    前言 本章主要讲述图片的缩小与放大,以及在图片上框出自己目标的东西 目录 实现opencv在图片上画框准确定位某个主体 一.如何在opencv内导入图片 二.如何对图片进行缩放? 1.在放入图片的基础 ...

  2. 结合openCV学习DIP之传统图像特征与匹配

    前言 关于图像的预处理部分参考  结合opencv学习DIP​​​​​​​ 概述 该笔记主要是基于DIP理论➕openCV实现,学习该笔记首先要确保通读DIP理论,并由自己的话描述相关知识,并且掌握o ...

  3. 结合opencv学习DIP

    关于传统的DIP中的图像特征,描述子提取及匹配问题,参考 结合openCV学习DIP之传统图像特征与匹配​​​​​​​ 第一部分DIP基础 图像的简单操作 imread()加载图像 imread加载图 ...

  4. 结合openCV学习DIP之机器学习CNN

    综述 结合openCV学习DIP之传统图像特征与匹配 图像特征 图像的浅层特征主要是颜色.纹理和形状 图像特征是指: 可以表达图像中对象的主要信息, 并且以此为依据可以从其他未知图像中检测出相似或相同 ...

  5. 深度学习LiDAR定位:L3-Net

    深度学习LiDAR定位:L3-Net 摘要 本文提出L3-Net--一种新颖的基于学习的LiDAR定位系统,可实现厘米级的定位,与现有最高水平的传统定位算法相媲美.与传统定位算法不同,本文创新地实现了 ...

  6. OpenCV学习笔记(二十六)——小试SVM算法ml OpenCV学习笔记(二十七)——基于级联分类器的目标检测objdect OpenCV学习笔记(二十八)——光流法对运动目标跟踪Video Ope

    OpenCV学习笔记(二十六)--小试SVM算法ml 总感觉自己停留在码农的初级阶段,要想更上一层,就得静下心来,好好研究一下算法的东西.OpenCV作为一个计算机视觉的开源库,肯定不会只停留在数字图 ...

  7. OpenCV学习笔记(六)(七)(八)(九)(十)

    OpenCV学习笔记(六)--对XML和YAML文件实现I/O操作 1. XML.YAML文件的打开和关闭 XML\YAML文件在OpenCV中的数据结构为FileStorage,打开操作例如: [c ...

  8. OpenCV学习案例之车牌识别EasyPR

    OpenCV学习案例之车牌识别easyPR 起始 github上开源中文车牌识别库比较少: HyperLPR,基于深度学习高性能中文车牌识别库,支持python.c++, 可以在Android,Lin ...

  9. OpenCV学习(二十三) :模板匹配:matchTemplate(),minMaxLoc()

    OpenCV学习(二十三) :模板匹配:matchTemplate() 1.概述 模板匹配是一种最原始.最基本的模式识别方法,研究某一特定对象物的图案位于图像的什么地方,进而识别对象物,这就是一个匹配 ...

  10. OPENCV学习笔记 - SIFT 尺度不变特征变换 Python

    OPENCV学习笔记 - SIFT 尺度不变特征变换 Python 为什么我们需要SIFT尺度不变特征变换? 第一,建立高斯差分金字塔 第二,极值点的精确定位 第三,确定关键点的主方向 第四,构建关键 ...

最新文章

  1. @value报错_Excel这都是些啥?#VALUE!、#DIVO!、#NUM!、#REF!、#NULL!、#NA!
  2. js事件循环 microtask macrotask
  3. HTML 事件属性_03
  4. 互联网1分钟 |1205
  5. Zuul网关原理及源码解读(草稿版)
  6. 大学计算机技术类社团/组织——社团官方网站
  7. VC6.0 导入资源崩溃
  8. lsd 特征点匹配代码_OpenCvSharp 通过特征点匹配图片
  9. 抽奖送福利|8大福利任性送,快来抽它
  10. Kotlin数据类型(一:数据类型)
  11. Vue 2与Vue 3在自定义组件v-model上的区别
  12. 技术人创业建站简略指南(第一季)
  13. mysql最多多少slave_MySQL5.7主从,单slave多master
  14. 第一章 Javascript基础
  15. 自行车html模板,自行车和配件HTML模板
  16. 高中计算机学科关于德育的论文,浅析如何在信息技术教学中实现德育教育
  17. 截止失真放大电路_BJT的失真
  18. html 页眉选项卡,连续两个奇数页页眉 再选择插入菜单——分页,执行2次
  19. 电脑编程和计算机编程有什么区别,机器人编程与电脑编程有何区别?官方专家为你详细解说!...
  20. [N1CTF 2022] solve_pow,baby_N1ES

热门文章

  1. poj 3261 Milk Patterns
  2. 关于Websockets问题:
  3. SVN入门 TortoiseSVN 检出
  4. SEO:搜索引擎优化的35个技巧
  5. DirectX9 3D 快速上手 1
  6. 除自身以外数组的乘积leetcode 238
  7. 2018-05-04 http入门
  8. 1.4 如何防止sql注入
  9. C语言课程学习的总结
  10. Mysql查询按照某字段指定顺序排序