读取视频

    VideoCapture cap;//视频路径cap.open("test.mp4");//如果视频不能正常打开则返回if (!cap.isOpened()){cout << "cannot open video!" << endl;return 0;}Mat frame_key;cap >> frame_key;//定义当前帧  frame_key=currentFramelong currentFrame = 1;if (frame_key.empty())cout << "frame_key is empty!" << endl;//显示视频imshow("fram_1", frame_key);waitKey(20);//把第一帧写入关键帧stringstream str;str << "./keyframe/" << currentFrame << ".jpg";imwrite(str.str(), frame_key);

定义一个循环,使得前一帧和当前帧进行对比

while (1){//定义后一帧  frame=currentFrame+1currentFrame++;Mat frame;cap >> frame;if (frame.empty()){//cout << "frame is empty!" << endl;break;}waitKey(20);Mat srcImage_base;Mat srcImage_test1;srcImage_base = frame_key;srcImage_test1 = frame;Mat previousImage, currentImage, resultImage;//将图像从BGR色彩空间转换到 HSV色彩空间cvtColor(srcImage_base, previousImage, COLOR_BGR2GRAY);cvtColor(srcImage_test1, currentImage, COLOR_BGR2GRAY);//帧差法,相减absdiff(currentImage, previousImage, resultImage);  //二值化,像素值相差大于20则置为255,其余为0。可以通过改变像素差值来调整视频关键帧threshold(resultImage, resultImage, 10, 255.0, THRESH_BINARY); float counter = 0, num = 0;// 统计两帧相减后图像素for (int i = 0; i < resultImage.rows; i++){//获取每一行的指针uchar *data = resultImage.ptr<uchar>(i); for (int j = 0; j < resultImage.cols; j++){//计算总像素个数num = num + 1;//访问到像素值if (data[j] == 255) {//计算像素值变化的像素个数counter = counter + 1;}}}//p设置的阈值float p;p = counter / num;//阈值大于0.55是关键帧if (p > 0.55) {frame_key = frame;cout << "正在写第" << currentFrame << "帧" << endl;//写入关键帧stringstream str;str << "./keyframe/" << currentFrame << ".jpg";imwrite(str.str(), frame_key);}}

完整代码项目

C++ opencv基于帧差法的关键帧提取相关推荐

  1. Python与OpenCV(一)——基于帧差法的运动目标检测程序分析

    OpenCV提供了强大的图像处理功能,与Python的结合堪称完美... 这一次,我们试一下用帧差法来完成对运动目标的检测与跟踪. 帧差法的原理是这样的:由于摄像机采集的视频序列具有连续性的特点,所以 ...

  2. 利用python语言实现帧差法,python+opencv实现帧差法

    实验效果如下图: 需要的可以下载代码文件直接就可以运行看看效果哦. 帧差法实现运动目标检测

  3. opencv进阶-背景建模-(帧差法与混合高斯模型)

    背景减除(Background Subtraction)是许多基于计算机视觉的任务中的主要预处理步骤.如果我们有完整的静止的背景帧,那么我们可以通过帧差法来计算像素差从而获取到前景对象.但是在大多数情 ...

  4. python识别重影验证码_python+opencv实现移动侦测(帧差法)

    本文实例为大家分享了python+opencv实现移动侦测的具体代码,供大家参考,具体内容如下 1.帧差法原理 移动侦测即是根据视频每帧或者几帧之间像素的差异,对差异值设置阈值,筛选大于阈值的像素点, ...

  5. ​基于matlab的目标检测 背景差分法和帧差法

    本程序实现了图像传感器的叶子抖动研究系统,利用背景差分.帧差法实现了此系统. 结果如下: 点击帧差法,显示如下: 部分程序见: gui_Singleton = 1; gui_State = struc ...

  6. opencv 帧差法 absdiff

    opencv 帧差法 absdiff opencv2.3.1里的以下函数可计算当前帧与背景之差的绝对值. cv::absdiff(backgroundImage,currentImage,foregr ...

  7. 【opencv】(11) 背景建模,帧差法、混合高斯模型,实战:行人检测,附python完整代码和数据集

    各位同学好,今天和大家分享一下opencv背景建模相关操作.主要介绍两种背景建模方法,帧差法和混合高斯模型. 案例简介:现有一份路口摄像机拍摄的行人流视频,通过背景建模方法,区分背景和前景,完成行人识 ...

  8. 基于混合高斯模型与帧差法结合的目标跟踪算法matlab仿真

    目录 一.理论基础 二.核心程序 三.仿真测试结果 一.理论基础 目标检测:混合高斯模型与帧差法结合的算法,与单独的混合高斯模型算法作对比,体现前者的优越性 3.要求和结果:对比改进前后的算法,可以非 ...

  9. 基于米联客zynq7020的fpga实现的帧差法

    博主是一个年初刚刚接触FPGA的新人,说实话觉得自己还是挺水的.上年的12月份刚刚了解了什么是FPGA,然后就参加了一个叫全国大学生集成电路创新大赛的比赛,里面的robei杯(当然可以后续和我交流一下 ...

  10. 目标检测、追踪梳理:帧差法、光流法、背景减除法

    (0)总览 运动目标检测是指在序列图像中检测出变化区域并将运动目标从背景图像(背景层)中提取出来.通常情况下,目标分类.跟踪和行为理解等后处理过程仅仅考虑图像中对应于运动目标的像素区域(前景层),因此 ...

最新文章

  1. Springboot,SSM框架比较,区别
  2. 工业互联网 — Overview
  3. 给Xshell设置舒适的配色方案
  4. HtmlAgilityPack 抓取页面的乱码处理
  5. linux下利用shell脚本和mysqldump热备份和恢复mysql
  6. Ubuntu 调节屏幕亮度
  7. [云炬创业基础笔记] 第三章测试2
  8. 编辑器扩展_关于MediaWiki的编辑器
  9. oracle unused 语法_oracle--set unused
  10. 嵌入式Linux入门2:工具掌握(Windows篇)
  11. python显示gif图片报错_用Python制作在地图上模拟瘟疫扩散的Gif图
  12. 最经典的权限设计同样也是最糟糕的权限设计,权限设计理念最关键第一步之间的PK...
  13. Linux 查看分区大小
  14. Chrome插件开发教程
  15. java手机连点脚本_自动点击连点器下载
  16. 命令行基础-tar命令详解
  17. linux查看cpu架构命令,linux查看cpu型号命令
  18. 基于ROS的导航框架
  19. Volterra方程的不动点
  20. 大量贴图采样限制下的渲染处理方法

热门文章

  1. python算法书籍-推荐 10 本程序员必读的算法书
  2. Radasm出现error LNK2001
  3. 随机生成一注双色球号码 - - (要求同色号码不重复 )
  4. 项目管理十大知识领域之项目成本管理
  5. dd命令测试硬盘读写速度
  6. CSRF跨站请求伪造漏洞修复方案
  7. 教你安装ps,pr,ae,ai等Adobe软件,办公必备
  8. 首都师范 博弈论 5 3 1合作博弈与数学表达
  9. android 蓝光过滤,蓝光过滤app最新版
  10. 13.56MHZ刷卡芯片CI521兼容cv520/ci520支持A卡B卡MIFARE协议