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

OpencvSharp 算子学习教案之 - Cv2.Accumulate

OpencvSharp 算子学习教案之 - Cv2.Accumulate大家好Opencv在很多工程项目中都会用到而OpencvSharp则是以C#开发与实现的Opencv操作库对.NET开发人员友好但很多API的中文资料、应用场景及常见坑点等缺乏系统性归纳因此这系列博客将给大家带来Cv2及Mat对象全系列算子学习教案供大家参考学习。Cv2.Accumulate教案版本V1.0面向对象OpenCvSharp 初学者所属模块imgproc源码位置OpenCvSharp/Cv2/Cv2_imgproc.cs:1542摘要Cv2.Accumulate 会把源图像逐像素加到累加器里常用于背景统计、多帧求和和连续帧分析。本文先解释 mask 和浮点累加器的作用再用一个 5x5 小矩阵演示多帧累加的具体过程。1. 函数名称带参数签名publicstaticvoidAccumulate(InputArraysrc,InputOutputArraydst,InputArraymask)2. 函数用途Cv2.Accumulate的作用是把输入图像的像素值加到已有累加器上。它最常见的用途有累积背景统计量。把多帧图像加成一张总和图。作为后续平均、方差或前景分析的基础步骤。这类操作最重要的一点是dst不能用 8 位图像保存因为累加多次后数值会越来越大因此通常要使用 32F 或 64F。3. 函数公式设源图像为s r c srcsrc累加器为d s t dstdst掩码为m a s k maskmask则更新规则为d s t ( x , y ) ← d s t ( x , y ) s r c ( x , y ) if m a s k ( x , y ) ≠ 0 dst(x,y) \leftarrow dst(x,y) src(x,y) \quad \text{if } mask(x,y) \neq 0dst(x,y)←dst(x,y)src(x,y)ifmask(x,y)0如果mask(x,y)0那么该位置不会参与累加。4. 函数原理说明先准备一个浮点累加器dst。每来一帧就把该帧的像素加进去。如果提供了 mask就只在 mask 非零的区域更新。累加完成后可以继续做平均、统计或背景建模。初学者最容易混淆的是以为dst可以直接是 8 位图像。以为mask是可有可无的装饰参数。不清楚Accumulate是逐像素加法而不是平均值。忘记多次累加后数值会迅速变大。5. 参数含义解析参数名类型必填含义典型输入/输出形状srcInputArray是输入图像1 或 3 通道图像dstInputOutputArray是累加器与 src 同尺寸、浮点类型maskInputArray是掩码单通道 8 位图像补充说明src支持 8 位或浮点图像。dst通常要用 32F 或 64F。mask为 0 的位置不会更新。6. 应用场景列表场景名场景说明输入输出场景A背景统计连续多帧逐像素累加视频帧累加器场景B多帧求和把多张图像直接叠加多张输入图总和图场景C局部统计只在 mask 指定区域更新输入图 掩码局部累加器7. 函数使用示例下面的 Console 程序会构造两帧小型灰度矩阵并把它们累加到同一个 32F 累加器里。为了方便观察只让中心 3x3 区域参与累加。usingSystem;usingSystem.Text;usingOpenCvSharp;internalstaticclassProgram{/// summary/// 程序入口。/// /summaryprivatestaticvoidMain(){// 让控制台支持中文输出便于阅读教学说明。Console.OutputEncodingEncoding.UTF8;// 构造两帧 5x5 灰度图第二帧在第一帧基础上整体增加 10方便观察累加结果。usingvarsrc1CreateDemoImage(0);usingvarsrc2CreateDemoImage(10);// 准备一个中心掩码只让中间 3x3 区域参与累加。usingvarmaskCreateCenterMask(newSize(5,5));// 累加器必须使用浮点类型因为它需要保存多帧相加后的结果。usingvardstnewMat(5,5,MatType.CV_32FC1,Scalar.All(0));// 依次把两帧图像加到累加器里。Cv2.Accumulate(src1,dst,mask);Cv2.Accumulate(src2,dst,mask);// 打印每一步的矩阵方便初学者手算核对。Console.WriteLine(src1 );PrintMatrix(src1);Console.WriteLine(src2 );PrintMatrix(src2);Console.WriteLine(mask );PrintMatrix(mask);Console.WriteLine(dst );PrintMatrix(dst);}/// summary/// 创建 5x5 的教学矩阵数值从 1 开始递增。/// /summary/// param nameoffset所有像素统一增加的偏移量。/param/// returns单通道灰度图。/returnsprivatestaticMatCreateDemoImage(intoffset){// 使用单通道 8 位矩阵便于看到每个像素值的变化。varimagenewMat(5,5,MatType.CV_8UC1);for(varrow0;rowimage.Rows;row){for(varcol0;colimage.Cols;col){// 这里用简单的递增序列让读者可以快速手算每个位置的值。image.Set(row,col,(byte)(row*image.Colscol1offset));}}returnimage;}/// summary/// 创建一个中心 3x3 的掩码。/// /summary/// param namesize掩码尺寸。/param/// returns单通道 8 位掩码。/returnsprivatestaticMatCreateCenterMask(Sizesize){// 先创建全 0 掩码再把中心区域填成 255。varmasknewMat(size.Height,size.Width,MatType.CV_8UC1,Scalar.All(0));Cv2.Rectangle(mask,newRect(1,1,3,3),Scalar.All(255),-1);returnmask;}/// summary/// 打印单通道矩阵。/// /summary/// param namematrix待打印矩阵。/paramprivatestaticvoidPrintMatrix(Matmatrix){// 先统一转成 64F方便按 double 读取和输出。usingvarmatrix64newMat();matrix.ConvertTo(matrix64,MatType.CV_64FC1);for(varrow0;rowmatrix64.Rows;row){Console.Write([);for(varcol0;colmatrix64.Cols;col){Console.Write(matrix64.Atdouble(row,col).ToString(F0));if(colmatrix64.Cols-1){Console.Write(, );}}Console.WriteLine(]);}Console.WriteLine();}}8. 注意事项dst必须是浮点类型。mask为 0 的位置不会被累加。连续多帧累加时数值会越来越大。如果你想直接求平均可以在累加后再除以帧数。9. 调优建议初学者先用小矩阵理解累加规则再迁移到真实视频。如果你只关心局部区域可以先设计好 mask。当你要做背景建模时Accumulate常常是第一步。10. 运行说明如果你在控制台工程里运行本文示例直接把代码放进Program.cs即可。如果你在本仓库里学习请打开 WPF 控件 Cv2AccumulateControl.xaml.cs 对应的页面。点击“运行场景A”可以在右侧查看多帧累加后的结果。11. 常见错误排查把dst误设成 8 位图像导致累加结果溢出或截断。忘记mask为 0 的区域不会更新。误把累加当成平均值。不了解多帧累加后需要再做归一化或除以帧数。

相关文章:

OpencvSharp 算子学习教案之 - Cv2.Accumulate

OpencvSharp 算子学习教案之 - Cv2.Accumulate 大家好,Opencv在很多工程项目中都会用到,而OpencvSharp则是以C#开发与实现的Opencv操作库,对.NET开发人员友好,但很多API的中文资料、应用场景及常见坑点等缺乏系统性归纳&#xff…...

企业级API网关实战:从Spring Cloud Gateway到微服务治理全解析

1. 项目概述:从单体应用到服务枢纽的演进在微服务架构成为主流的今天,一个稳定、高效且功能丰富的API网关(API Gateway)是连接前端应用与后端众多服务的核心枢纽。我最近在梳理团队的技术栈时,深入研究了adaline/gatew…...

AI Agent技能开发实战:将安全审计工具封装为智能体可调用模块

1. 项目概述:从代码仓库到AI技能生态的跨越最近在GitHub上闲逛,发现了一个挺有意思的项目:nsasoft/nsauditor-ai-agent-skill。乍一看,这名字有点“缝合怪”的感觉,把“nsasoft”、“nsauditor”、“AI Agent”和“ski…...

Angular 响应式原理深度解析:核心机制与源码解读

一、前言Angular 响应式原理深度解析:核心机制与源码解读。本文深入源码层面,剖析核心设计原理,帮你从"会用"升级到"精通"。二、核心原理深度剖析2.1 数据结构设计// Angular 核心数据结构与算法 // 理解 Angular 的底层…...

Claude与OpenClaw整合指南:AI代码生成与自动化执行实战

1. 项目概述与核心价值最近在开发者社区里,一个名为“Claude-Code-x-OpenClaw-Guide-Zh”的项目引起了我的注意。乍一看这个标题,可能有些朋友会觉得它像是一个普通的工具集合或者文档翻译。但当我深入探究其背后的代码仓库和社区讨论后,我发…...

基于MCP协议构建AI可访问的数字基础设施安全暴露服务器

1. 项目概述:一个暴露数字基础设施的MCP服务器最近在折腾AI Agent的生态,发现一个挺有意思的项目,叫apifyforge/digital-infrastructure-exposure-mcp。光看这个名字,可能有点云里雾里,但如果你也在研究如何让AI更深入…...

Doris 进阶指南:从小项目到生产级系统的完整路径

一、前言Doris 进阶指南:从小项目到生产级系统的完整路径。本文深入源码层面,剖析核心设计原理,帮你从"会用"升级到"精通"。二、核心原理深度剖析2.1 数据结构设计// Doris 核心数据结构与算法 // 理解 Doris 的底层数据…...

基于YOLO26深度学习的钢铁腐蚀生锈识别检测系统(项目源码+数据集+模型权重+UI界面+python+深度学习+远程环境部署)

摘要 钢铁材料在工业基础设施中广泛应用,但其长期暴露于潮湿、氧化环境中极易发生腐蚀生锈现象,严重影响结构安全与使用寿命。为实现钢铁腐蚀区域的自动化检测,本研究基于YOLO26目标检测算法构建了一套钢铁腐蚀识别系统。系统采用单类别检测…...

Arm虚拟中断控制器(ICV)架构与寄存器解析

1. Arm虚拟中断控制器架构概述在Armv8/v9架构的虚拟化环境中,虚拟中断控制器(ICV)作为关键组件,负责为虚拟机提供独立的中断管理能力。与传统物理中断控制器(GIC)相比,ICV通过硬件辅助的虚拟化技术,实现了中断资源的隔离与虚拟化。…...

CircuitPython音频输出与PWM伺服电机控制实战指南

1. 项目概述与核心价值如果你正在用像Adafruit的Feather M0、ItsyBitsy或者Circuit Playground Express这类小巧的微控制器板子做项目,想让它们“开口说话”或者“动手干活”,那么音频输出和伺服电机控制就是你绕不开的两项核心技能。前者能让你的项目发…...

YOLO26驱动的足球比赛多目标检测系统:球员、守门员、裁判与足球的实时识别(项目源码+数据集+模型权重+UI界面+python+深度学习+远程环境部署)

摘要 足球作为全球最受欢迎的体育运动之一,其数字化分析对于战术研究、运动员评估和比赛裁判具有重要意义。本文基于YOLO目标检测算法,构建了一套足球运动员识别检测系统,实现对比赛场景中足球、守门员、球员和裁判四类目标的自动检测与定位…...

无代码物联网开发实战:WipperSnapper与Adafruit IO快速构建数据采集系统

1. 项目概述:当硬件开发告别代码如果你和我一样,对物联网项目充满热情,但又时常被嵌入式编程的编译、烧录、调试劝退,那么今天聊的这个工具,可能会彻底改变你的工作流。我们不再需要为读取一个按键的状态去写几行digit…...

2026年,你的企业为什么还不会用AI发稿?技术人深度拆解Infoseek媒体库

最近GitHub上又一个开源项目火了,能自动生成并发布技术博客。这让我想到,在我们讨论AI取代程序员的同时,另一个领域的“自动化”早已跑在了前面——企业的媒体内容发布。很多技术团队还在手动找渠道、求小编,而一些市场部同事&…...

终极指南:4步让旧Mac运行最新macOS的完整教程

终极指南:4步让旧Mac运行最新macOS的完整教程 【免费下载链接】OpenCore-Legacy-Patcher Experience macOS just like before 项目地址: https://gitcode.com/GitHub_Trending/op/OpenCore-Legacy-Patcher 还在为你的老Mac无法升级最新系统而烦恼吗&#xff…...

三步完成抖音内容高效备份:免费无水印下载工具完全指南

三步完成抖音内容高效备份:免费无水印下载工具完全指南 【免费下载链接】douyin-downloader A practical Douyin downloader for both single-item and profile batch downloads, with progress display, retries, SQLite deduplication, and browser fallback supp…...

小爱音箱变身智能音乐中心:3步实现语音控制本地与在线音乐播放

小爱音箱变身智能音乐中心:3步实现语音控制本地与在线音乐播放 【免费下载链接】xiaomusic 使用小爱音箱播放音乐,音乐使用 yt-dlp 下载。 项目地址: https://gitcode.com/GitHub_Trending/xia/xiaomusic 你是否厌倦了小爱音箱有限的音乐资源&…...

终极艾尔登法环性能优化工具:帧率解锁与视野扩展完全指南

终极艾尔登法环性能优化工具:帧率解锁与视野扩展完全指南 【免费下载链接】EldenRingFpsUnlockAndMore A small utility to remove frame rate limit, change FOV, add widescreen support and more for Elden Ring 项目地址: https://gitcode.com/gh_mirrors/el/…...

RAG向量存储原理(余弦相似度、欧氏距离、ANN近似最近邻、HNSW原理、混合检索)

文章目录深入理解 RAG 向量存储原理一、什么是 RAG?二、RAG 的核心流程三、什么是向量(Vector)四、Embedding 的本质五、向量空间(Vector Space)六、为什么高维向量能表达语义七、Chunk(文本切块&#xff0…...

电子墨水屏驱动芯片IL0376F与SSD1681选型与设计实战

1. 项目概述与核心价值如果你正在为你的物联网设备、电子阅读器或者智能家居终端寻找一种超低功耗、阳光下可视性极佳的显示方案,那么电子墨水屏(E-Ink)几乎是唯一的选择。但当你真正开始动手,从琳琅满目的屏幕型号和驱动方案中挑…...

从零构建开发者个人主页:技术选型、部署优化与SEO实践

1. 项目概述:一个开发者个人主页的诞生与演进在技术社区里,一个以username/username.github.io命名的仓库,几乎已经成为了开发者个人技术品牌的标准名片。当我看到vassiliylakhonin/vassiliylakhonin.github.io这个项目标题时,脑海…...

< 12 > Linux进程:进程虚拟地址空间机制 —— 内存管理的美学

1. 程序地址空间回顾C语言阶段学习过程序地址空间,长这样代码段,数据段:这些是常量区,栈区,堆区,还有一些系统需要的空间这些是内存吗? ——不是内存。这些都是虚拟地址空间,OS给我们…...

解锁QQ音乐加密音频:QMCDecode让macOS用户重获音乐自由

解锁QQ音乐加密音频:QMCDecode让macOS用户重获音乐自由 【免费下载链接】QMCDecode QQ音乐QMC格式转换为普通格式(qmcflac转flac,qmc0,qmc3转mp3, mflac,mflac0等转flac),仅支持macOS,可自动识别到QQ音乐下载目录,默认…...

PCF8591模数转换器实战指南:从I2C通信到多通道数据采集

1. 项目概述:为什么你需要一个PCF8591?在嵌入式开发和电子制作的世界里,我们常常需要处理一个核心矛盾:我们的大脑和代码生活在离散的数字世界(0和1),但我们身处的物理世界却是一个充满连续变化…...

2026年5月权威实测:Claude Code必装的7个MCP,效率翻倍

Top 1:GitHub MCP —— “衔枚之钉” 如果说MCP服务器里只能留下一个,那GitHub MCP绝对是不可动摇的“钉子户”。它不仅是每个开发者工作流的起点,更是将AI代理从“代码提示者”推向“自主开发者”的核心动力。 它的核心价值是**“端到端的工…...

电机选型与控制实战指南:从直流、步进到伺服电机

1. 电机选型:从理解需求开始选电机,听起来像是硬件工程师或者资深创客的活儿,但只要你玩过Arduino小车、做过3D打印机,或者想给家里的模型加个能动的部件,这事儿就绕不开。我刚开始接触项目时,也犯过迷糊&a…...

Adafruit IO Feeds:物联网数据流管理的核心枢纽与实战指南

1. 项目概述:为什么Feeds是物联网项目的“数据心脏”如果你正在玩转物联网项目,无论是用ESP32做个家庭气象站,还是用树莓派监控植物生长,最终都会遇到一个核心问题:数据往哪存,怎么管?传感器读数…...

CircuitPython开发实战:串口通信与编辑器配置全攻略

1. 项目概述与核心价值 如果你刚开始接触CircuitPython,或者从Arduino这类环境转过来,可能会觉得有点懵:代码写好了,怎么看到板子的输出?板子报错了,怎么知道错在哪里?为什么我的代码文件一保存…...

终极Cookie本地导出指南:如何安全获取cookies.txt文件

终极Cookie本地导出指南:如何安全获取cookies.txt文件 【免费下载链接】Get-cookies.txt-LOCALLY Get cookies.txt, NEVER send information outside. 项目地址: https://gitcode.com/gh_mirrors/ge/Get-cookies.txt-LOCALLY 在Web开发、API测试和自动化脚本…...

《QGIS空间数据处理与高级制图》011:SHP 批量转 GPKG(单文件夹 / 递归多文件夹)

作者:翰墨之道,毕业于国际知名大学空间信息与计算机专业,获硕士学位,现任国内时空智能领域资深专家、CSDN知名技术博主。多年来深耕地理信息与时空智能核心技术研发,精通 QGIS、GrassGIS、OSG、OsgEarth、UE、Cesium、OpenLayers、Leaflet、MapBox 等主流工具与框架,兼具…...

思源宋体TTF中文版:7款字重一键解锁专业中文排版

思源宋体TTF中文版:7款字重一键解锁专业中文排版 【免费下载链接】source-han-serif-ttf Source Han Serif TTF 项目地址: https://gitcode.com/gh_mirrors/so/source-han-serif-ttf 还在为中文设计项目找不到合适的免费字体而烦恼吗?Source Han …...