当前位置: 首页 > 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;
}

运行结果

在这里插入图片描述

http://www.lryc.cn/news/442346.html

相关文章:

  • source ~/.bash_profile有什么用
  • 【C++笔记】类和对象的深入理解(三)
  • 时代变了,MySQL 早已不是最流行的数据库了
  • K8S容器实例Pod安装curl-vim-telnet工具
  • 代码随想录算法训练营DAY09之动态规划(一)基础题目
  • 线性系统分析
  • Ubuntu 20.04 部署 NET8 Web - Systemd 的方式 达到外网访问的目的
  • 线程池(ThreadPool):使用ExecutorService、ThreadPoolExecutor等线程池管理并发任务以及底层实现原理
  • 人力资源数据集分析(二)_随机森林与逻辑回归
  • 【30天玩转python】数据库操作
  • PTT:Point Tree Transformer for Point Cloud Registration 论文解读
  • C++速通LeetCode中等第7题-和为K的子数组(巧用前缀和)
  • 【读书笔记-《30天自制操作系统》-23】Day24
  • XML:DOM4j解析XML
  • 15.5 创建监控控制平面的service
  • 【Docker Nexus3】maven 私库
  • Docker本地部署Chatbot Ollama搭建AI聊天机器人并实现远程交互
  • MySQL:用户管理
  • 论文《Mixture of Weak Strong Experts on Graphs》笔记
  • 【诉讼流程-健身房-违约-私教课-诉讼书提交流程-民事诉讼-自我学习-铺平通往法律的阶梯-讲解(3)】
  • 数据结构(Day14)
  • Paragon NTFS for Mac和Tuxera NTFS for Mac,那么两种工具有什么区别呢?
  • HashTable结构体数组实现
  • Python 管理 AWS ElastiCache 告警
  • 【无人机设计与控制】四旋翼无人机俯仰姿态保持模糊PID控制(带说明报告)
  • [数据集][目标检测]不同颜色的安全帽检测数据集VOC+YOLO格式7574张5类别
  • 确保 App 跟踪透明度权限:Flutter 中的实践
  • 李沐 过拟合和欠拟合【动手学深度学习v2】
  • Go Testify学习与使用
  • Word中引用参考文献和公式编号的方法