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

OpenCV运动分析和目标跟踪(1)累积操作函数accumulate()的使用

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

算法描述

将一个图像添加到累积图像中。
该函数将 src 或其部分元素添加到 dst 中:
dst ( x , y ) ← dst ( x , y ) + src ( x , y ) if mask ( x , y ) ≠ 0 \texttt{dst} (x,y) \leftarrow \texttt{dst} (x,y) + \texttt{src} (x,y) \quad \text{if} \quad \texttt{mask} (x,y) \ne 0 dst(x,y)dst(x,y)+src(x,y)ifmask(x,y)=0
该函数支持多通道图像。每个通道独立处理。
cv::accumulate 函数可以用于收集由静止相机拍摄的场景背景的统计数据,并用于进一步的前景-背景分割。

函数原型


void cv::accumulate	
(InputArray 	src,InputOutputArray 	dst,InputArray 	mask = noArray() 
)	

参数

  • 参数src 输入图像,类型为 CV_8UC(n),CV_16UC(n),CV_32FC(n) 或 CV_64FC(n),其中 n 是一个正整数。

  • 参数dst 累积图像,与输入图像具有相同数量的通道,并且深度为 CV_32F 或 CV_64F。

  • 参数mask 可选的操作掩码。

代码示例

#include <iostream>
#include <opencv2/opencv.hpp>int main()
{// 加载一个真实的图像cv::Mat sourceImage = cv::imread( "/media/dingxin/data/study/OpenCV/sources/images/sun2.jpg", cv::IMREAD_COLOR );if ( sourceImage.empty() ){std::cout << "Error loading image" << std::endl;return -1;}// 获取源图像的尺寸和通道数cv::Size imageSize = sourceImage.size();int numChannels = sourceImage.channels();// 输出源图像的尺寸和类型std::cout << "Source Image Size: " << imageSize << std::endl;std::cout << "Source Image Type: " << sourceImage.type() << std::endl;std::cout << "Source Image Channels: " << numChannels << std::endl;// 创建一个空的累积图像cv::Mat cumulativeImage = cv::Mat::zeros(imageSize, CV_32FC(numChannels)); // 累积图像类型为 CV_32FC3// 输出累积图像的尺寸和类型std::cout << "Cumulative Image Size: " << cumulativeImage.size() << std::endl;std::cout << "Cumulative Image Type: " << cumulativeImage.type() << std::endl;std::cout << "Cumulative Image Channels: " << cumulativeImage.channels() << std::endl;// 将源图像转换为浮点类型cv::Mat sourceImageFloat;sourceImage.convertTo(sourceImageFloat, CV_32FC(numChannels), 1.0 / 255.0);// 输出转换后的图像尺寸和类型std::cout << "Converted Image Size: " << sourceImageFloat.size() << std::endl;std::cout << "Converted Image Type: " << sourceImageFloat.type() << std::endl;std::cout << "Converted Image Channels: " << sourceImageFloat.channels() << std::endl;// 创建一个掩码图像cv::Mat mask = cv::Mat::ones(imageSize, CV_8U) * 255; // 全部像素为255,即不使用掩码// 输出掩码图像的尺寸和类型std::cout << "Mask Image Size: " << mask.size() << std::endl;std::cout << "Mask Image Type: " << mask.type() << std::endl;// 确保累积图像和源图像的尺寸一致if (cumulativeImage.rows != sourceImageFloat.rows || cumulativeImage.cols != sourceImageFloat.cols) {std::cout << "Error: Cumulative image and source image do not have the same size." << std::endl;return -1;}// 确保累积图像和源图像的通道数一致if (cumulativeImage.channels() != sourceImageFloat.channels()) {std::cout << "Error: Cumulative image and source image do not have the same number of channels." << std::endl;return -1;}// 累积源图像到累积图像中int numAccumulations = 100; // 增加累加次数for (int i = 0; i < numAccumulations; ++i) {cv::accumulate(sourceImageFloat, cumulativeImage, mask);}// 显示累积图像cv::Mat normalizedCumulativeImage;cv::normalize(cumulativeImage, normalizedCumulativeImage, 0, 255, cv::NORM_MINMAX, CV_8U);// 使用高对比度的色彩映射cv::Mat enhancedCumulativeImage;cv::applyColorMap(normalizedCumulativeImage, enhancedCumulativeImage, cv::COLORMAP_JET);cv::imshow("Original Image", sourceImage);cv::imshow("Cumulative Image", enhancedCumulativeImage);cv::waitKey( 0 );return 0;
}

运行结果

在这里插入图片描述

相关文章:

OpenCV运动分析和目标跟踪(1)累积操作函数accumulate()的使用

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 将一个图像添加到累积图像中。 该函数将 src 或其部分元素添加到 dst 中&#xff1a; dst ( x , y ) ← dst ( x , y ) src ( x , y ) if mask…...

source ~/.bash_profile有什么用

source ~/.bash_profile 是在 Unix/Linux 系统上用来重新加载用户的 Bash 配置文件 ~/.bash_profile 的命令。这条命令的作用是使得当前的 Bash 环境重新读取并应用 ~/.bash_profile 中的设置和变量定义。 作用&#xff1a; 1. 更新环境变量&#xff1a; ~/.bash_profile 是用户…...

【C++笔记】类和对象的深入理解(三)

【C笔记】类和对象的深入理解(三) &#x1f525;个人主页&#xff1a;大白的编程日记 &#x1f525;专栏&#xff1a;C笔记 文章目录 【C笔记】类和对象的深入理解(三)前言一.日期类的实现1.1声明和定义分离1.2日期类整数1.3日期类整数1.4日期类-整数1.5日期类-日期1.6复用对…...

时代变了,MySQL 早已不是最流行的数据库了

以下文章来源于古时的风筝 &#xff0c;作者风筝 在StackOverflow 上看到2024年技术趋势&#xff0c;关于数据库的部分&#xff0c;PostgreSQL 是开发人员使用最多的数据库&#xff0c;超过 MySQL 了。虽然在国内好像不是这样。 PostgreSQL 在 2018 年的开发者调查中首次亮相…...

K8S容器实例Pod安装curl-vim-telnet工具

在没有域名的情况下&#xff0c;有时候需要调试接口等需要此工具 安装curl、telnet、vim等 直接使用 apk add curlapk add vimapk add tennet...

代码随想录算法训练营DAY09之动态规划(一)基础题目

理论基础&#xff1a; 如果某一问题有很多重叠子问题&#xff0c;使用动态规划是最有效的。 动态规划中每一个状态一定是由上一个状态推导出来的&#xff0c;这一点就区分于贪心&#xff0c;贪心没有状态推导&#xff0c;而是从局部直接选最优的。 例子&#xff1a; 例如&a…...

线性系统分析

一、定义 (1)叠加性 若 且 则称该系统具有叠加性。 叠加性:系统的一个输入不影响系统对其他输入的响应。 (2)均匀性 若 对任意常数a下式都成立 则称该系统具有均匀性。 均匀性:系统能够保持对输入信号的缩放因子不变。 (3)线性系统 若一个系统同时具有叠加性和…...

Ubuntu 20.04 部署 NET8 Web - Systemd 的方式 达到外网访问的目的

1.Ubuntu服务器环境安装 1.1 增加微软包安装源 wget https://packages.microsoft.com/config/ubuntu/22.04/packages-microsoft-prod.deb -O packages-microsoft-prod.deb sudo dpkg -i packages-microsoft-prod.deb1.2 Install the .NET SDK # 更新本地软件包列表。原理&am…...

线程池(ThreadPool):使用ExecutorService、ThreadPoolExecutor等线程池管理并发任务以及底层实现原理

线程池&#xff08;ThreadPool&#xff09;是一种通过预先创建和维护一组线程的机制&#xff0c;用来高效管理并发任务。线程池不仅能减少创建和销毁线程的开销&#xff0c;还能更好地控制并发任务的执行。Java 中提供了多种方式来管理线程池&#xff0c;其中包括 ExecutorServ…...

人力资源数据集分析(二)_随机森林与逻辑回归

数据入口&#xff1a;人力资源分析数据集 - Heywhale.com 数据说明 字段说明EmpID唯一的员工IDAge年龄AgeGroup年龄组Attrition是否离职BusinessTravel出差&#xff1a;很少、频繁、不出差DailyRate日薪Department任职部门&#xff1a;研发部门、销售部门、人力资源部门Dista…...

【30天玩转python】数据库操作

数据库操作 数据库是应用程序中用于存储和管理数据的核心组件。Python 提供了多种与数据库交互的方式&#xff0c;支持不同类型的数据库&#xff0c;包括关系型数据库&#xff08;如 MySQL、PostgreSQL&#xff09;和 NoSQL 数据库&#xff08;如 MongoDB&#xff09;。在这篇…...

PTT:Point Tree Transformer for Point Cloud Registration 论文解读

目录 一、导言 二、相关工作 1、基于Transformer的点云配准 2、针对点云的局部注意力 三、PTT 1、KPconv提取特征 2、Tree Transformer Encoder 3、Decoder 4、估计姿态 5、损失函数 四、实验 1、对比不同Backbone 2、运行时间对比 3、对比不同PTT方法下RR指标的…...

C++速通LeetCode中等第7题-和为K的子数组(巧用前缀和)

巧用哈希表与前缀和&#xff0c;前缀和差为k的两个序号之间的数组就是满足条件的子数组&#xff0c;用哈希表来存放每个序号的前缀和。 前缀和就是头元素到当前序号子数组元素的和 class Solution { public:int subarraySum(vector<int>& nums, int k) {unordered_…...

【读书笔记-《30天自制操作系统》-23】Day24

本篇内容依然比较简单&#xff0c;主要是优化窗口功能以及开发定时器应用程序。首先是优化窗口的切换功能&#xff0c;实现通过键盘和鼠标切换窗口&#xff0c;然后是实现通过鼠标关闭窗口。接着实现不同窗口输入状态的切换&#xff0c;最后是实现定时器的API与应用程序。 1.…...

XML:DOM4j解析XML

XML简介&#xff1a; 什么是XML&#xff1a;XML 是独立于软件和硬件的信息传输工具。 XML 的设计宗旨是传输数据&#xff0c;而不是显示数据。XML 标签没有被预定义。您需要自行定义标签。XML不会做任何事情&#xff0c;XML被设计用来结构化、存储以及传输信息。 XML可以发明…...

15.5 创建监控控制平面的service

本节重点介绍 : k8s中service的作用和类型创建k8s控制平面的service 给prometheus采集用&#xff0c; 类型clusterIp kube-schedulerkube-controller-managerkube-etcd service的作用 Kubernetes Service定义了这样一种抽象&#xff1a; Service是一种可以访问 Pod逻辑分组…...

【Docker Nexus3】maven 私库

1.部署环境 window 11 x64Docker Desktop 4.34.1 (166053) Docker Engine v27.2.0 1.1.Docker 镜像源 1.1.1.Docker Engine 配置 {"builder": {"features": {"buildkit": true},"gc": {"defaultKeepStorage": "32…...

Docker本地部署Chatbot Ollama搭建AI聊天机器人并实现远程交互

文章目录 前言1. 拉取相关的Docker镜像2. 运行Ollama 镜像3. 运行Chatbot Ollama镜像4. 本地访问5. 群晖安装Cpolar6. 配置公网地址7. 公网访问8. 固定公网地址 前言 本文主要分享如何在群晖NAS本地部署并运行一个基于大语言模型Llama 2的个人本地聊天机器人并结合内网穿透工具…...

MySQL:用户管理

添加用户 create user usernamelocalhost identified by user_password;删除用户 drop user usernamelocalhost;查看所有用户 输入格式 select user,host from mysql.user; 输出 mysql> select user,host from mysql.user; ----------------------------- | user …...

论文《Mixture of Weak Strong Experts on Graphs》笔记

【Mowst 2024 ICLR】论文提出了一种新的图神经网络架构&#xff0c;称为Mixture of weak and strong experts&#xff08;Mowst&#xff09;&#xff0c;通过将轻量级的多层感知机&#xff08;MLP&#xff09;作为弱专家和现成的GNN作为强专家相结合&#xff0c;以处理图中的节…...

OpenClaw压力测试:Qwen3-14B在并发请求下的响应延迟分析

OpenClaw压力测试&#xff1a;Qwen3-14B在并发请求下的响应延迟分析 1. 测试背景与目标 上周在部署OpenClaw对接本地Qwen3-14B模型时&#xff0c;遇到一个实际问题&#xff1a;当我同时触发多个自动化任务时&#xff0c;系统响应明显变慢&#xff0c;甚至偶尔会出现任务失败。…...

Slim模板终极部署指南:从开发到生产的完整流程

Slim模板终极部署指南&#xff1a;从开发到生产的完整流程 【免费下载链接】slim Slim is a template language whose goal is to reduce the syntax to the essential parts without becoming cryptic. 项目地址: https://gitcode.com/gh_mirrors/sli/slim Slim模板语言…...

隐私优先方案:OpenClaw+Qwen3-14B镜像处理敏感数据的5层防护

隐私优先方案&#xff1a;OpenClawQwen3-14B镜像处理敏感数据的5层防护 1. 为什么需要本地化隐私方案 去年处理一批客户调研数据时&#xff0c;我犯过一个致命错误——把包含联系方式的原始表格上传到某公有云AI平台进行清洗。三天后&#xff0c;公司邮箱突然收到匿名勒索邮件…...

GESP2025年3月认证C++三级( 第一部分选择题(1-8))

&#x1f3af; 第1题&#xff1a;Base64魔法箱&#x1f4dc; 题目核心&#xff1a; &#x1f449; 每 3个字节 → 变成4个字节1、&#x1f9e0; 故事理解有一个魔法机器&#xff1a;&#x1f449; 每放进去 3个苹果 &#x1f34e;&#x1f34e;&#x1f34e;&#xff08;不足3个…...

Qclaw 效率工作流实战测评:让微信变成你的「远程生产力中枢」

一句微信消息&#xff0c;驱动电脑自动干活——这不是概念片&#xff0c;是我用了两周 Qclaw 后的真实体感。 一、Qclaw 是什么&#xff1f;30 秒讲清楚 qclaw Qclaw 是腾讯电脑管家团队出品的个人 AI Agent 工具&#xff0c;基于开源框架 OpenClaw 封装而成。核心逻辑用一句…...

SwartNinjaPIR:嵌入式高可靠PIR运动检测驱动库

1. SwartNinjaPIR 库概述&#xff1a;面向嵌入式系统的高可靠性 PIR 运动检测驱动设计SwartNinjaPIR 是一个专为 Arduino 及兼容平台&#xff08;如 STM32、ESP32 等基于 Arduino Core 的 MCU&#xff09;设计的轻量级、生产就绪型被动红外&#xff08;Passive Infrared, PIR&a…...

电影票销售管理|基于springboot + vue电影票销售管理系统(源码+数据库+文档)

电影票销售管理系统 目录 基于springboot vue电影票销售管理系统 一、前言 二、系统功能演示 三、技术选型 四、其他项目参考 五、代码参考 六、测试参考 七、最新计算机毕设选题推荐 八、源码获取&#xff1a; 基于springboot vue电影票销售管理系统 一、前言 博主…...

功率半导体技术:GaN与SiC的性能对比与应用指南

1. 功率半导体技术演进背景在电力电子领域&#xff0c;功率半导体器件的发展经历了从硅(Si)到第三代半导体材料的重大跨越。作为工程师&#xff0c;我们正站在技术革新的关键节点&#xff1a;氮化镓(GaN)和碳化硅(SiC)这两种宽禁带半导体材料正在重塑功率转换的格局。传统硅基功…...

寒武纪高级系统软件工程师面试技术解析

1. 寒武纪高级系统软件工程师面试全解析 作为一名在芯片验证领域摸爬滚打多年的工程师&#xff0c;去年我经历了寒武纪高级系统软件工程师岗位的完整面试流程。这个岗位对系统底层和芯片验证的要求非常高&#xff0c;今天我就把两轮技术面的核心问题拆解给大家&#xff0c;并分…...

从脉冲到CAN总线:一文搞懂Emm42 V5.0步进闭环驱动的四种控制方式(含Arduino/PLC接线示例)

从脉冲到CAN总线&#xff1a;Emm42 V5.0步进闭环驱动的四种控制方式深度解析 在工业自动化和嵌入式开发领域&#xff0c;步进电机的精确控制一直是工程师们关注的重点。Emm42 V5.0步进闭环驱动器作为新一代高性能驱动解决方案&#xff0c;凭借其丰富的控制接口和先进的FOC矢量…...