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;
}

运行结果

在这里插入图片描述

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

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

相关文章

网络基础,协议,OSI分层,TCP/IP模型

网络的产生是数据交流的必然趋势&#xff0c;计算机之间的独立的个体&#xff0c;想要进行数据交互&#xff0c;一开始是使用磁盘进行数据拷贝&#xff0c;可是这样的数据拷贝效率很低&#xff0c;于是网络交互便出现了&#xff1b; 1.网络是什么 网络&#xff0c;顾名思义是…

使用Serilog在.NET应用程序中写日志文件

在开发.NET应用程序时&#xff0c;良好的日志系统是至关重要的。它可以帮助我们跟踪应用程序的运行情况&#xff0c;更好地理解应用程序的行为&#xff0c;以及在出现问题时进行调试。今天&#xff0c;我要介绍的是一个强大且易于使用的日志库——Serilog。 什么是Serilog&…

串口接收不到数据之电阻虚焊bug分析思路

单片机和EC移远通信模块进行通信&#xff0c;相同的代码运行在相同的硬件上&#xff0c;但是一个能联网&#xff0c;一个因为没有EC的应答连不上网。 开始分析&#xff0c;排除软件问题&#xff0c;给EC模块发为什么没应答&#xff1f; 1.发送失败 2.接收失败 排除情况2&#x…

汽车租赁系统1.0版本

汽车租赁系统1.0版本比较简陋&#xff0c;以后还会有2.0、3.0……就像《我爱发明》里面的一代机器二代机器&#xff0c;三代机器一样&#xff0c;是一个迭代更新的过程&#xff08;最近比较忙&#xff0c;可能会很久&#xff09;&#xff0c;这个1.0版本很简陋&#xff0c;也请…

Python+Pytest框架,“api_key.py文件怎么编写“?

1、在"api_keyword"文件夹下新增"api_key.py" import allure import requests import json import jsonpath from deepdiff import DeepDifffrom config import *allure.title("测试用例执行") class ApiKey:allure.step(">>>:开…

中学 教资 科目二

第一章 1. 简述生产力与教育的关系 (1)生产力对教育的制约作用–生产力水平决定教育发展水平 生产力水平决定教育的规模和速度生产力制约人才培养的规格和教育结构生产力制约教学内容、方法、组织形式与手段制约龟(规模)速(速度)够(结构)防(方法)守(手段) (2)…

跨平台开发新视角:利用Android WebView实现Web内容的原生体验

在移动应用开发领域&#xff0c;跨平台解决方案一直是一个热门话题。开发者们不断寻求能够同时在iOS和Android平台上提供一致用户体验的方法。而Android的WebView组件&#xff0c;作为一个强大的工具&#xff0c;允许开发者在Android应用中嵌入Web内容&#xff0c;为用户提供接…

【LeetCode】2309:兼具大小写的最好英文字母

题目描述 见LeetCode.2309题目。 C 以下是官方题解当中给出做法的复现。 class Solution { public:string greatestLetter(string s) {unordered_set<char> ht(s.begin(), s.end());for (int i25; i>0; i--){if (ht.count(a i) > 0 && ht.count(A i)…

Vue 2中的this指向详解

在JavaScript中&#xff0c;this的指向是许多开发者经常遇到的问题&#xff0c;尤其是在使用Vue这样的框架时。在Vue 2中&#xff0c;理解this的指向对于正确地访问组件的数据和方法至关重要。 1. this在Vue组件中的指向 在Vue组件的选项中&#xff0c;this通常指向当前组件实…

Maven从入门到精通(三)

一、Settings 配置 settings.xml 用来配置 maven 项目中的各种参数文件&#xff0c;包括本地仓库、远程仓库、私服、认证等信息。 全局 settings、用户 setting、pom 的区别&#xff1a; 全局 settings.xml 是 maven 的全局配置文件&#xff0c;一般位于 ${maven.home}/conf…

tomcat改默认登录页面

<!-- 在 conf/server.xml 文件中的 <Host> 元素内部添加如下代码 --> <Context path"" docBase"D:\tomcat\apache-tomcat-8.5.72\webapps\tb" debug"0" reloadable"true"/> 这里的各个属性含义如下&#xff1a; pa…

安全工具 | 使用Burp Suite的10个小tips

Burp Suite 应用程序中有用功能的集合 img Burp Suite 是一款出色的分析工具&#xff0c;用于测试 Web 应用程序和系统的安全漏洞。它有很多很棒的功能可以在渗透测试中使用。您使用它的次数越多&#xff0c;您就越发现它的便利功能。 本文内容是我在测试期间学到并经常的主要…

音视频入门基础:AAC专题(4)——ADTS格式的AAC裸流实例分析

一、ADTS格式的AAC裸流实例分析 在《音视频入门基础&#xff1a;AAC专题&#xff08;3&#xff09;——AAC的ADTS格式简介》中对AAC的ADTS格式进行了简介。下面用一个具体的例子来对ADTS格式的AAC裸流进行分析。 通过《音视频入门基础&#xff1a;AAC专题&#xff08;2&#x…

获取对象的key和value值

1.获取对象的key值 let obj{ name:张三, age:18 }let aObject.keys(obj) console.log(a) //["name","age"]获取对象的value值 name:张三, age:18 }let aObject.keys(obj) console.log(a) //["张三",18] Object.values(obj)

【C-项目】网盘(一期)

概述 登录服务器后&#xff0c;即可浏览服务器的文件系统。通过命令上传或下载文件。 服务器使用tcp类型的套接字&#xff0c;每收到一个连接请求&#xff0c;就新开一个子进程去处理 一期功能 客户端可以使用的命令 命令解析ls显示当前工作目录的所有文件pwd显示当前工作目录…

SpringBoot:Web开发(基于SpringBoot使用MyBatis-Plus+JSP开发)

目录 前期准备 构建项目&#xff08;IDEA2023.1.2&#xff0c;JDK21&#xff0c;SpringBoot3.3.3&#xff09; 添加启动器 Model准备 这里我们利用MybatisX插件生成我们所需要的实体类、数据访问层以及服务层 注意选择MyBatis-Plus3以及Lombok 然后再在service接口中定义…

C++——矩阵无重复行列取数问题

矩阵无重复行列取数问题 题目&#xff1a;有一个矩阵&#xff0c;我每次可以取一个数&#xff0c;后面再取数时不能再取该数所在行和列的其他数&#xff0c;我现在想一直取直到无法再取数位置&#xff0c;现在想要取到的数的和最大&#xff0c;问应该怎么取&#xff0c;最大的和…

yolov8 rect batch_shapes 672 图像大小变化

遇到这样一种情况&#xff1a;img_sz640,但在val时&#xff0c;输入网络的张量h和w是672 为什么输入图像会从640变大到672&#xff1f; 这是因为一种rectangle增强方法&#xff0c;“同个batch里做rectangle宽高等比变换&#xff0c; 加快训练 &#xff0c;对于多余的黑边做到…

【算法】-单调队列

目录 什么是单调队列 区域内最大值 区域内最小值 什么是单调队列 说到单调队列&#xff0c;其实就是一个双端队列&#xff0c; 顾名思义&#xff0c;单调队列的重点分为「单调」和「队列」。「单调」指的是元素的「规律」——递增&#xff08;或递减&#xff09;。「队列」指…

电脑提示丢失mfc140u.dll的详细解决方案,mfc140u.dll文件是什么

遇到电脑显示“缺少 mfc140u.dll 文件”的错误其实是比较常见的。这种提示通常表示某个应用程序在尝试运行时未能找到它所需的关键 DLL 文件&#xff0c;导致无法正常启动。不过&#xff0c;别担心&#xff0c;本文将一步步引导你通过几种不同的方法来解决这个问题&#xff0c;…