当前位置: 首页 > news >正文

OpenCV运动分析和目标跟踪(3)计算图像序列的加权平均值函数accumulateWeighted()的使用

  • 操作系统:ubuntu22.04
  • OpenCV版本:OpenCV4.9
  • IDE:Visual Studio Code
  • 编程语言:C++11

算法描述

更新一个运行平均值。

该函数计算输入图像 src 和累积器 dst 的加权和,使得 dst 成为帧序列的运行平均值:
dst ( x , y ) ← ( 1 − alpha ) ⋅ dst ( x , y ) + alpha ⋅ src ( x , y ) if mask ( x , y ) ≠ 0 \texttt{dst} (x,y) \leftarrow (1- \texttt{alpha} ) \cdot \texttt{dst} (x,y) + \texttt{alpha} \cdot \texttt{src} (x,y) \quad \text{if} \quad \texttt{mask} (x,y) \ne 0 dst(x,y)(1alpha)dst(x,y)+alphasrc(x,y)ifmask(x,y)=0
也就是说,alpha 调节更新速度(累积器“忘记”早期图像的速度有多快)。该函数支持多通道图像。每个通道独立处理。

accumulateWeighted是OpenCV中的一个函数,用于计算图像序列的加权平均值。这个函数对于背景减除、运动检测等计算机视觉应用非常有用。它可以动态地更新一个图像的加权平均值,而不需要存储整个图像序列。

函数原型

void cv::accumulateWeighted	
(InputArray 	src,InputOutputArray 	dst,double 	alpha,InputArray 	mask = noArray() 
)		

参数

  • 参数src 输入图像,可以是单通道或三通道,8位或32位浮点数。
  • 参数dst 累积器图像,通道数与输入图像相同,32位或64位浮点数。
  • 参数alpha 输入图像的权重。
  • 参数mask 可选的操作掩码。

示例代码


#include <iostream>
#include <opencv2/opencv.hpp>int main()
{// 加载图像cv::Mat frame = cv::imread( "/media/dingxin/data/study/OpenCV/sources/images/hawk.jpg", cv::IMREAD_GRAYSCALE );if ( !frame.data ){std::cout << "Could not open or find the image" << std::endl;return -1;}// 初始化累积加权平均图像cv::Mat weightedAverage = cv::Mat::zeros( frame.size(), CV_32F );// 设置权重系数double alpha = 0.05;  // 减小权重系数,使累积效果更平滑// 模拟多帧累积int numFrames = 100;  // 大幅增加累积次数for ( int i = 0; i < numFrames; ++i ){// 使用同一图像多次以模拟多帧情况cv::accumulateWeighted( frame, weightedAverage, alpha );// 打印累积过程中的最小值和最大值,以便调试double minVal, maxVal;cv::minMaxLoc( weightedAverage, &minVal, &maxVal );std::cout << "Frame " << i + 1 << ": MinVal = " << minVal << ", MaxVal = " << maxVal << std::endl;}// 归一化处理double minVal, maxVal;cv::minMaxLoc( weightedAverage, &minVal, &maxVal );// 将累积加权平均图像转换回8位图像以便显示cv::Mat normalizedWeightedAverage;if ( maxVal > minVal ){weightedAverage.convertTo( normalizedWeightedAverage, CV_8U, 255.0 / ( maxVal - minVal ), -minVal * ( 255.0 / ( maxVal - minVal ) ) );}else{// 如果最大值等于最小值,直接归一化为255weightedAverage.convertTo( normalizedWeightedAverage, CV_8U, 255.0 );}// 显示原始图像cv::imshow( "Original Image", frame );// 显示累积加权平均结果图像cv::imshow( "Weighted Average Result", normalizedWeightedAverage );// 等待按键,以便查看图像cv::waitKey( 0 );// 关闭所有窗口cv::destroyAllWindows();// 保存结果cv::imwrite( "weighted_average_result.jpg", normalizedWeightedAverage );return 0;
}

运行结果

在这里插入图片描述
感觉这个函数没怎么起作用,两张图是一样的,希望有高人能指导这个函数怎么用才效果明显

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • PyCharm用法
  • git拉取大文件
  • 数据库基础知识---------------------------(3)
  • solidwork剪裁实体
  • 【软考】计算机软件著作权
  • vscode关闭git的提交提示
  • 第一章 初识SpringBoot
  • 王者荣耀英雄检测数据集
  • QNX Hypervisor(十一)Linux Guest IPC 三
  • 命名空间————————
  • PMP--二模--解题--1-10
  • 2024.9.12(k8s环境搭建2)
  • postgresql-patroni高可用安装部署
  • 【Elasticsearch】-7.17.24版本接入
  • 自定义复杂AntV/G6案例
  • 【前端学习】-粗谈选择器
  • Apache Pulsar 2.1 重磅发布
  • canvas绘制圆角头像
  • CentOS7 安装JDK
  • CentOS从零开始部署Nodejs项目
  • HomeBrew常规使用教程
  • Iterator 和 for...of 循环
  • LeetCode541. Reverse String II -- 按步长反转字符串
  • ng6--错误信息小结(持续更新)
  • Phpstorm怎样批量删除空行?
  • Python进阶细节
  • 关于Java中分层中遇到的一些问题
  • 坑!为什么View.startAnimation不起作用?
  • 小程序、APP Store 需要的 SSL 证书是个什么东西?
  • 用mpvue开发微信小程序
  • 正则表达式小结
  • ​​​​​​​ubuntu16.04 fastreid训练过程
  • ​用户画像从0到100的构建思路
  • ‌前端列表展示1000条大量数据时,后端通常需要进行一定的处理。‌
  • ## 临床数据 两两比较 加显著性boxplot加显著性
  • $NOIp2018$劝退记
  • (M)unity2D敌人的创建、人物属性设置,遇敌掉血
  • (Python第六天)文件处理
  • (附源码)springboot码头作业管理系统 毕业设计 341654
  • (附源码)springboot人体健康检测微信小程序 毕业设计 012142
  • (教学思路 C#之类三)方法参数类型(ref、out、parmas)
  • (六)什么是Vite——热更新时vite、webpack做了什么
  • (五)IO流之ByteArrayInput/OutputStream
  • (心得)获取一个数二进制序列中所有的偶数位和奇数位, 分别输出二进制序列。
  • .desktop 桌面快捷_Linux桌面环境那么多,这几款优秀的任你选
  • .net core使用ef 6
  • .NET Framework、.NET Core 、 .NET 5、.NET 6和.NET 7 和.NET8 简介及区别
  • .NETCORE 开发登录接口MFA谷歌多因子身份验证
  • .Net环境下的缓存技术介绍
  • .NET精简框架的“无法找到资源程序集”异常释疑
  • .vue文件怎么使用_我在项目中是这样配置Vue的
  • :O)修改linux硬件时间
  • @Not - Empty-Null-Blank
  • @Validated和@Valid校验参数区别
  • [ solr入门 ] - 利用solrJ进行检索