【opencv】示例-fback.cpp 使用OpenCV库来实现密集光流算法

4eb56eb3c7252e670123ffa0fa1e43ec.jpeg

ad2e9655c4341438ca4de7aa562fc46f.png

// 引入OpenCV库中有关视频跟踪的头文件
#include "opencv2/video/tracking.hpp"
// 引入OpenCV库中有关图像处理的头文件
#include "opencv2/imgproc.hpp"
// 引入OpenCV库中有关视频输入的头文件
#include "opencv2/videoio.hpp"
// 引入OpenCV库中有关高级GUI功能的头文件
#include "opencv2/highgui.hpp"// 引入标准输入输出流库,用于控制台输入输出
#include <iostream>// 使用命名空间cv,避免每次调用OpenCV库时都需加cv::前缀
using namespace cv;
// 同样使用命名空间std,省略std::前缀
using namespace std;// 声明帮助函数
static void help(char** argv)
{// 输出说明信息,在控制台显示程序功能和使用方法cout <<"\nThis program demonstrates dense optical flow algorithm by Gunnar Farneback\n""Mainly the function: calcOpticalFlowFarneback()\n"// 说明如何调用程序"Call:\n"<<  argv[0]// 默认使用摄像头0作为视频输入源<<  "This reads from video camera 0\n" << endl;
}// 定义绘制光流图的函数
static void drawOptFlowMap(const Mat& flow, Mat& cflowmap, int step,double, const Scalar& color)
{// 遍历图像的每个step间隔的像素点for(int y = 0; y < cflowmap.rows; y += step)for(int x = 0; x < cflowmap.cols; x += step){// 获取光流计算结果中的点const Point2f& fxy = flow.at<Point2f>(y, x);// 在当前点和光流指向的位置之间绘制线段line(cflowmap, Point(x,y), Point(cvRound(x+fxy.x), cvRound(y+fxy.y)),color);// 在当前的点上绘制一个圆,表示光流的起点circle(cflowmap, Point(x,y), 2, color, -1);}
}// 程序入口点
int main(int argc, char** argv)
{// 命令行参数解析器,解析是否有帮助命令cv::CommandLineParser parser(argc, argv, "{help h||}");if (parser.has("help")){// 如果存在帮助命令,调用help函数并退出程序help(argv);return 0;}// 创建视频采集对象,默认从摄像头0开始获取视频数据VideoCapture cap(0);// 再次调用help函数help(argv);// 检查视频采集对象是否创建成功if( !cap.isOpened() )return -1;// 声明Mat类型的流对象,用于存储光流信息和结果Mat flow, cflow, frame;// 声明UMat类型对象,利于OpenCV GPU加速UMat gray, prevgray, uflow;// 创建一个新的窗口以显示结果namedWindow("flow", 1);for(;;) // 无限循环,除非手动终止{// 从VideoCapture对象读取一帧图像cap >> frame;// 将RGB图像转为灰度图像cvtColor(frame, gray, COLOR_BGR2GRAY);if( !prevgray.empty() ) // 检查是否是视频的第一帧{// 计算光流calcOpticalFlowFarneback(prevgray, gray, uflow, 0.5, 3, 15, 3, 5, 1.2, 0);// 将前一帧的灰度图像转为彩色图像cvtColor(prevgray, cflow, COLOR_GRAY2BGR);// 将光流结果从uflow复制到flowuflow.copyTo(flow);// 绘制光流图drawOptFlowMap(flow, cflow, 16, 1.5, Scalar(0, 255, 0));// 在窗口中显示结果imshow("flow", cflow);}if(waitKey(30)>=0) // 等待键盘输入,退出循环break;// 交换gray和prevgray,为处理下一帧图像做准备std::swap(prevgray, gray);}// 程序正常退出,返回0return 0;
}

这段代码的主要功能是演示使用Gunnar Farneback算法计算视频序列中的稠密光流。程序从默认摄像头(通常是计算机的内置摄像头)捕捉视频帧,对于连续的帧,计算每一帧和它之前帧之间的光流,并且将光流结果绘制到原始的灰度图上面,从而生成了一个流动的效果以示光流场。每次迭代中读取的帧转换为灰度图像,然后使用calcOpticalFlowFarneback函数计算当前帧与上一帧之间的光流。使用drawOptFlowMap函数将计算的光流可视化,并通过OpenCV的imshow功能将结果显示在窗口中。用户可以通过键盘输入中断循环。

calcOpticalFlowFarneback(prevgray, gray, uflow, 0.5, 3, 15, 3, 5, 1.2, 0);

59903b744a63f1539f22e63535e78330.png

drawOptFlowMap(flow, cflow, 16, 1.5, Scalar(0, 255, 0));

d5dea6e2855eb63a0a459a114a5726da.png

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

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

相关文章

DVWA -XSS(Reflected)-通关教程-完结

DVWA -XSS&#xff08;Reflected&#xff09;-通关教程-完结 XSS&#xff08;Reflected&#xff09; ​ XSS 攻击全称跨站脚本攻击。是指用户在 Web 页面中提交恶意脚本&#xff0c;从而使浏览包含恶意脚本的页面的用户在不知情的情况下执行该脚本&#xff0c;导致被攻击的行为…

Elasticsearch部署安装

环境准备 Anolis OS 8 Firewall关闭状态&#xff0c;端口自行处理 Elasticsearch&#xff1a;7.16.1&#xff08;该版本需要jdk11&#xff09; JDK&#xff1a;11.0.19 JDK # 解压 tar -zxvf jdk-11.0.19_linux-x64_bin.tar.gz# 编辑/etc/profile vim /etc/profile# 加入如下…

动态规划-入门三道题

1137. 第 N 个泰波那契数 题目描述&#xff1a; 状态表示: dp[i]表示第i个泰波那契数。 状态转移方程&#xff1a; dp[i]dp[i-3]dp[i-2]dp[i-1]。 初始化: 动态规划问题的初始化就是为了去避免初始情况下的越界问题。这里就对dp[0]0,dp[1]1,dp[2]1这样进行初始化即可&#xf…

基于Vue的宠物领养系统的设计与实现(论文+源码)_kaic

目 录 摘 要 ABSTRACT 1 引言 1.1 课题背景 1.2 设计原则 1.3 论文组织结构 2 系统关键技术 2.1 JSP技术 2.2 JAVA技术 2.3 B/S结构 2.4 MYSQL数据库 3 系统分析 3.1 可行性分析 3.1.1 操作可行性 3.1.2 经济可行性 3.1.3 技术可行性 3.1.4 法律可行性 3.2 系统功能分析 3.3…

搭建PyTorch神经网络进行气温预测(手写+调包两种方法)(保证学会!)+找到神经网络的最优情况

代码上有注释&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01; 本篇主要包括三大部分&#xff1a; 第一部分&#xff1a;导入数据集导入第三方库数据集简单介绍与可视化数据集简单预处理 第二部分&#xff1a;手写神经网络代码实现气温预测&#…

【高端电流检测IC储能产品应用方案】耐压28V侧轨的电流检测芯片FP130A 应用于电脑电源,开关电源以及多口快充充电器,户外移动电源,适配器,电池充电器等

电流检测技术常用于高压短路保护、电机控制、DC/DC换流器、系统功耗管理、二次电池的电流管理、蓄电池管理等电流侦测等场景。对于大多数应用而言&#xff0c;都是间接测量电阻两端的跨压差来获取待测电流。 如下面的高端电流检测芯片FP130A&#xff0c;丝印是FC915。电路原理图…

SOLIDOWRKS怎么将中间格式的模具装配体转化为装配体格式

模具是工业生产中用于制作成型物品的工具&#xff0c;它由各种零件构成&#xff0c;可以通过改变所成型材料的物理状态来实现物品外形的加工。如果工程师已经有其他格式的模具装配体&#xff0c;但是又想将其他格式的模具装配体导入solidworks里面&#xff0c;并且将一个个实体…

Python 基于 OpenCV 视觉图像处理实战 之 OpenCV 简单视频处理实战案例 之十 简单视频浮雕画效果

Python 基于 OpenCV 视觉图像处理实战 之 OpenCV 简单视频处理实战案例 之十 简单视频浮雕画效果 目录 Python 基于 OpenCV 视觉图像处理实战 之 OpenCV 简单视频处理实战案例 之十 简单视频浮雕画效果 一、简单介绍 二、简单视频浮雕画效果实现原理 三、简单视频浮雕画效果…

情怀无价:重拾记忆的魅力——照片质量修复探究(上)

在当今数字时代&#xff0c;我们与照片的关系愈发密切。照片不仅是记录生活中珍贵瞬间的工具&#xff0c;更是承载情感和回忆的载体。然而&#xff0c;时间的流逝和技术的限制常常让我们的照片变得模糊、损坏&#xff0c;甚至失去了原本的色彩和细节。如何让这些珍贵的照片重现…

C++的并发世界(七)——互斥锁

0.死锁的由来 假设有两个线程T1和T2&#xff0c;它们需要对两个互斥量mtx1和mtx2进行访问。而且需要按照以下顺序获取互斥量的所有权&#xff1a; -T1先获取mte1的所有权,再获取mt2的所有权。 -T2先获取 mtx2的所有权。再铁取 mtx1的所有权。 如果两个线程同时执行&#xff0c…

在线预约小程序怎么做

在快节奏的现代生活中&#xff0c;无论是预约理发、还是预定餐厅&#xff0c;亦或是挂号就医&#xff0c;我们都希望有一个更加便捷、高效的方式来完成这些任务。而今&#xff0c;随着科技的发展&#xff0c;一款全新的在线预约小程序应运而生&#xff0c;为我们的生活带来了前…

程序猿之路

我接触计算机算对自己来说是比较晚的了&#xff0c;上初中的时候就有微机课&#xff0c;但是在那个小县城&#xff0c;上课也只是3个人共用一个电脑&#xff0c;我初中整个过程只会开关机&#xff0c;哈哈&#xff0c;虽然学过word&#xff0c;但是无奈&#xff0c;我插不上手呀…

机器学习 -- 端到端的机器学习项目

场景 我们将一个端到端的项目&#xff08;一个从开始到结束包含了所有必要步骤和组件的完整项目&#xff09;案例&#xff0c;步骤大概有&#xff1a; 1.观察大局。 2.获得数据。 3.从数据探索和可视化中获得洞见。 4.机器学习算法的数据准备。 5.选择和训练模型。 6.微调模型…

【简单讲解下Symfony框架】

&#x1f3a5;博主&#xff1a;程序员不想YY啊 &#x1f4ab;CSDN优质创作者&#xff0c;CSDN实力新星&#xff0c;CSDN博客专家 &#x1f917;点赞&#x1f388;收藏⭐再看&#x1f4ab;养成习惯 ✨希望本文对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出…

使用 Prometheus 在 KubeSphere 上监控 KubeEdge 边缘节点(Jetson) CPU、GPU 状态

作者&#xff1a;朱亚光&#xff0c;之江实验室工程师&#xff0c;云原生/开源爱好者。 KubeSphere 边缘节点的可观测性 在边缘计算场景下&#xff0c;KubeSphere 基于 KubeEdge 实现应用与工作负载在云端与边缘节点的统一分发与管理&#xff0c;解决在海量边、端设备上完成应…

Redis(三) String字符串

文章目录 前言常见命令SETGETMSETMGETINCRINCRBYDECRDECRBYINCRBYFLOATAPPENDGETRANGESETRANGESTRLEN命令小结 前言 Redis 的数据有很多种数据类型&#xff0c;包括字符串类型、列表类型、哈希类型、集合类型、有序集合类型等。这几种数据类型是针对于 value 来说的&#xff0…

搜维尔科技:【煤矿安全仿真】煤矿事故预防处置VR系统,矿山顶板灾害,冲击地压灾害等预防演练!

产品概述 煤矿事故预防处置VR系统 系统内容&#xff1a; 事故预防处置VR系统的内容包括&#xff1a;火灾的预防措施、火灾预兆、防灭火系统、火灾案例重现、顶板事故预兆、顶板事故原因、顶板事故案例重现、瓦斯概念及性质、瓦斯的涌出形式、瓦斯预兆、瓦斯爆炸条件及预防措…

怎样将PDF转成PPT,有免费的工具吗?

PDF转换为PPT的需求在现代办公和学习中越来越常见。很多人可能遇到过需要将PDF文件中的内容转移到PPT中以方便编辑和展示的情况。幸运的是&#xff0c;现在市面上有许多工具可以帮助我们实现这一目标&#xff0c;而且其中不乏一些免费的选项。本文将详细介绍如何使用这些免费工…

基于级联H桥的多电平逆变器PWM控制策略的simulink建模与仿真

目录 1.课题概述 2.系统仿真结果 3.核心程序与模型 4.系统原理简介 5.完整工程文件 1.课题概述 级联H桥&#xff08;CHB&#xff09;多电平逆变器是一种通过多个H桥单元级联实现更高电压等级和更高质量输出波形的电力电子转换装置。这种逆变器在高压大功率场合应用广泛&am…

参花期刊投稿发表论文

《参花》是由国家新闻出版总署批准&#xff0c;吉林省文化和旅游厅主管&#xff0c;吉林省文化馆主办的正规文学类期刊。文学是用语言塑造形象反映社会生活的一种语言艺术&#xff0c;是自觉、独立而又面向整个社会的艺术&#xff0c;是文化中极具强烈感染力的重要组成部分&…