【opencv】示例-phase_corr.cpp 捕获视频流并通过计算相位相关性来检测画面中的移动...

390d5323b2c3c190c9334049dc6d501b.png

// 包含OpenCV库的头文件
#include "opencv2/core.hpp" // 包含OpenCV核心功能
#include "opencv2/videoio.hpp" // 包含视频IO功能
#include "opencv2/highgui.hpp" // 包含高级GUI功能,显示图像
#include "opencv2/imgproc.hpp" // 包含图像处理功能using namespace cv; // 使用OpenCV命名空间,方便调用OpenCV函数int main(int, char* [])
{VideoCapture video(0); // 创建VideoCapture对象,用于捕获编号为0的摄像头视频// 定义一些Mat类型的变量用于存放处理的帧Mat frame, curr, prev, curr64f, prev64f, hann;char key; // 用于接收用户按键// 主循环do{video >> frame; // 从视频流中读取一帧保存到frame变量中cvtColor(frame, curr, COLOR_RGB2GRAY); // 将捕获的彩色帧转换为灰度图// 如果prev为空,说明是第一帧,需要进行初始化if(prev.empty()){prev = curr.clone(); // 将当前帧存储到prev中,用于下次迭代createHanningWindow(hann, curr.size(), CV_64F); // 创建汉宁窗,用于相位相关函数}// 将prev和curr的数据类型转换为CV_64F,用于相位相关函数prev.convertTo(prev64f, CV_64F);curr.convertTo(curr64f, CV_64F);// 计算prev和curr之间的相位偏移Point2d shift = phaseCorrelate(prev64f, curr64f, hann);double radius = std::sqrt(shift.x*shift.x + shift.y*shift.y); // 计算偏移的幅度// 如果偏移幅度大于5,绘制一个圆和线来表示偏移方向if(radius > 5){Point center(curr.cols >> 1, curr.rows >> 1); // 计算帧的中心点// 在当前帧上绘制圆和线circle(frame, center, (int)radius, Scalar(0, 255, 0), 3, LINE_AA);line(frame, center, Point(center.x + (int)shift.x, center.y + (int)shift.y), Scalar(0, 255, 0), 3, LINE_AA);}imshow("phase shift", frame); // 显示经过相位相关偏移标示的图像key = (char)waitKey(2); // 等待2ms,如果有按键则获取到key变量prev = curr.clone(); // 更新prev帧为当前帧} while(key != 27); // 如果按键不是Esc键继续循环,Esc键ASCII码为27,用于退出循环return 0; // 程序结束,返回0
}
createHanningWindow(hann, curr.size(), CV_64F);

035ab5113fe059a98079f265dda4a94a.png

Point2d shift = phaseCorrelate(prev64f, curr64f, hann)

f2d9c59def6e2bf011408480a08a67b6.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/616431.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

数据结构之单链表相关刷题

找往期文章包括但不限于本期文章中不懂的知识点: 个人主页:我要学编程(ಥ_ಥ)-CSDN博客 所属专栏:数据结构 数据结构之单链表的相关知识点及应用-CSDN博客 下面题目基于上面这篇文章: 下面有任何不懂的地方欢迎在评论区留言或…

Open CASCADE学习|BRepOffsetAPI_DraftAngle

BRepOffsetAPI_DraftAngle 是 Open CASCADE Technology (OCCT) 中用于创建带有草图斜面的几何体的类。草图斜面是一种在零件设计中常见的特征,它可以在零件的表面上创建一个倾斜的面,通常用于便于零件的脱模或是增加零件的强度。 本例演示了如何创建一个…

mp3怎样才能转换成wav格式?音频互相转换的方法

一,什么是WAV WAV,全称为波形音频文件(Waveform Audio File Format),是一种由微软公司和IBM公司联合开发的音频文件格式。自1991年问世以来,WAV格式因其无损的音频质量和广泛的兼容性,成为了多…

在Linux驱动中,如何确保中断上下文的正确保存和恢复?

大家好,今天给大家介绍在Linux驱动中,如何确保中断上下文的正确保存和恢复?,文章末尾附有分享大家一个资料包,差不多150多G。里面学习内容、面经、项目都比较新也比较全!可进群免费领取。 在Linux驱动中&am…

配置交换机端口安全

1、实验目的 通过本实验可以掌握: 交换机管理地址配置及接口配置。查看交换机的MAC地址表。配置静态端口安全、动态端口安全和粘滞端口安全的方法。 2、实验拓扑 配置交换机端口安全的实验拓扑如图所示。 配置交换机端口安全的实验拓扑 3、实验步骤 &#xff…

RetinalNet论文笔记

RetinalNet 概述1. 引言2. 相关工作3. 焦点损失4. RetinaNet Detector 检测器5. 实验6. 结论 3. Focal loss3.1. 平衡交叉熵3.2. 焦点损失定义3.3. 类别不平衡和模型初始化3.4. 类别不平衡和两阶段检测器 4. RetinaNet Detector特征金字塔网络骨干(Feature Pyramid …

【图论】详解链式前向星存图法+遍历法

细说链式前向星存图法 首先要明白,链式前向星的原理是利用存边来进行模拟图。 推荐左神的视频–建图、链式前向星、拓扑排序 比方说有这样一张图,我们用链式前向星来进行模拟时,可以将每一条边都进行编号,其中,红色的…

【数据挖掘】实验7:高级绘图(上)

实验7:高级绘图(上) 一:实验目的与要求 1:了解R语言中各种图形元素的添加方法,并能够灵活应用这些元素。 2:了解R语言中的各种图形函数,掌握常见图形的绘制方法。 二:实…

vue3 知识点的补充 之 第一节

01 vue2与vue3的区别 vue2 采用object.defuneProperty()实现 对数组不友好 重写了数组的方法,同时无法监听数组length长度的改变。对于对象只能劫持设置好的数据 新增需要使用vue.set vue3 采用proxy进行代理,不需要重写数组的方法 同时可以监听数组长度…

wangeditor与deaftjs的停止维护,2024编辑器该如何做技术选型(一)

wangeditor暂停维护的声明: wangeditor是国内开发者开发的编辑器,用户也挺多,但是由于作者时间关系,暂停维护。 deaft的弃坑的声明: draft是Facebook开源的,但是也弃坑了,说明设计的时候存在很大…

乡村智慧化升级:数字乡村打造农村生活新品质

目录 一、乡村智慧化升级的内涵与意义 二、乡村智慧化升级的具体实践 1、加强农村信息基础设施建设 2、推广智慧农业应用 3、提升乡村治理智慧化水平 4、丰富智慧乡村生活内容 三、数字乡村打造农村生活新品质的成果展现 1、农业生产效率与质量双提升 2、农民收入与消…

SPP论文笔记

这篇论文讨论了在深度卷积网络中引入空间金字塔池化(SPP)层的方法,以解决传统深度卷积网络需要固定图像尺寸的限制。以下是论文各部分的总结: 1. 引言 论文指出现有的深度卷积神经网络(CNN)需要固定大小的…