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

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

OpencvSharp 算子学习教案之 - Cv2.Scharr大家好Opencv在很多工程项目中都会用到而OpencvSharp则是以C#开发与实现的Opencv操作库对.NET开发人员友好但很多API的中文资料、应用场景及常见坑点等缺乏系统性归纳因此这系列博客将给大家带来Cv2及Mat对象全系列算子学习教案供大家参考学习。Cv2.Scharr教案版本V1.0面向对象OpenCvSharp 初学者所属模块imgproc源码位置OpenCvSharp/Cv2/Cv2_imgproc.cs:458摘要Scharr 可以看成是 Sobel 在 3x3 情况下的高精度替代方案。本文会先说明它和 Sobel 的等价关系再用一个简单几何图形示例对比 Sobel X / Y 和 Scharr X / Y 的差别。1. 函数名称带参数签名publicstaticvoidScharr(InputArraysrc,OutputArraydst,MatTypeddepth,intdx,intdy,doublescale1,doubledelta0,BorderTypesborderTypeBorderTypes.Default)2. 函数用途Cv2.Scharr用来计算图像的一阶导数但它只在 3x3 情况下有特殊意义。它常用于比较普通 3x3 Sobel 和 Scharr 的差别。讲解更高精度的一阶导数估计。做边缘方向分析。作为 Sobel 的教学补充。如果你希望初学者理解“同样是求导核系数不同会带来什么变化”Scharr 很适合做对照。3. 函数公式官方文档说明Scharr(src,dst,ddepth,dx,dy,scale,delta,borderType) Scharr(src, dst, ddepth, dx, dy, scale, delta, borderType)Scharr(src,dst,ddepth,dx,dy,scale,delta,borderType)等价于Sobel(src,dst,ddepth,dx,dy,FILTER_SCHARR,scale,delta,borderType) Sobel(src, dst, ddepth, dx, dy, FILTER\_SCHARR, scale, delta, borderType)Sobel(src,dst,ddepth,dx,dy,FILTER_SCHARR,scale,delta,borderType)在 x 方向上Scharr 的 3x3 核可以写成[−303−10010−303] \begin{bmatrix} -3 0 3\\ -10 0 10\\ -3 0 3 \end{bmatrix}​−3−10−3​000​3103​​y 方向则是它的转置。4. 函数原理说明Scharr 主要解决的是“小核导数近似精度”的问题。dx和dy仍然表示导数阶数。它没有ksize参数因为它固定就是 3x3 特例。ddepth的选择和 Sobel 一样要避免负值丢失。borderType仍然决定边界如何补值。教学上可以把它理解成“更讲究系数的 Sobel 3x3 版本”。5. 参数含义解析参数名类型必填含义srcInputArray是输入图像dstOutputArray是输出图像ddepthMatType是输出深度dxint是x 方向导数阶数dyint是y 方向导数阶数scaledouble否结果缩放系数deltadouble否结果偏移量borderTypeBorderTypes否边界外推方式补充说明Scharr只适合 3x3 这一种导数核场景。常见做法仍然是把结果存到CV_16S。如果只是想做一般教学先理解 Sobel 再看 Scharr 会更顺。BORDER_WRAP不支持。6. 应用场景列表场景名场景说明典型用途场景AX 方向对照观察 Scharr X 和 Sobel X边缘比较场景BY 方向对照观察 Scharr Y 和 Sobel Y边缘比较场景C精度讨论解释 Scharr 的系数意义理论教学场景D特例理解说明 FILTER_SCHARRAPI 教学7. 函数使用示例下面的 Console 程序演示Cv2.Scharr。示例会同时计算 Sobel 和 Scharr 的 x / y 导数再打印它们之间的差异帮助初学者理解“Scharr 不是新框架而是 Sobel 的特例”。usingSystem;usingSystem.Text;usingOpenCvSharp;internalstaticclassProgram{privatestaticvoidMain(){// 让控制台输出中文说明。Console.OutputEncodingEncoding.UTF8;RunDemo();}/// summary/// 运行 Scharr 教学示例。/// /summaryprivatestaticvoidRunDemo(){usingvarsourceCreateDemoImage();usingvargraySourcenewMat();// 先转成灰度图这样导数比较更直接。Cv2.CvtColor(source,graySource,ColorConversionCodes.BGR2GRAY);usingvarsobelXnewMat();usingvarsobelYnewMat();usingvarscharrXnewMat();usingvarscharrYnewMat();// 普通 3x3 Sobel 和 Scharr 做对照最容易看出它们的区别。Cv2.Sobel(graySource,sobelX,MatType.CV_16S,1,0,3,1.0,0.0,BorderTypes.Default);Cv2.Sobel(graySource,sobelY,MatType.CV_16S,0,1,3,1.0,0.0,BorderTypes.Default);Cv2.Scharr(graySource,scharrX,MatType.CV_16S,1,0,1.0,0.0,BorderTypes.Default);Cv2.Scharr(graySource,scharrY,MatType.CV_16S,0,1,1.0,0.0,BorderTypes.Default);usingvarmagnitudenewMat();usingvarscharrXFloatnewMat();usingvarscharrYFloatnewMat();// 计算 Scharr 的梯度幅值方便从“方向”和“强度”两个角度看边缘。scharrX.ConvertTo(scharrXFloat,MatType.CV_32F);scharrY.ConvertTo(scharrYFloat,MatType.CV_32F);Cv2.Magnitude(scharrXFloat,scharrYFloat,magnitude);Console.WriteLine(场景AScharr(InputArray src, OutputArray dst, MatType ddepth, int dx, int dy, double scale 1, double delta 0, BorderTypes borderType BorderTypes.Default));Console.WriteLine(Scharr 本质上就是 Sobel 的 FILTER_SCHARR 特例最适合拿来做 3x3 一阶导数的精度对照。\n);Console.WriteLine($源图{DescribeMat(source)});Console.WriteLine($灰度图{DescribeMat(graySource)});Console.WriteLine($Sobel X{DescribeMat(sobelX)});Console.WriteLine($Scharr X{DescribeMat(scharrX)});Console.WriteLine($Sobel Y{DescribeMat(sobelY)});Console.WriteLine($Scharr Y{DescribeMat(scharrY)});Console.WriteLine($Scharr X 与 Sobel X 的差异{DescribeDifferenceStatistics(scharrX,sobelX)});Console.WriteLine($Scharr Y 与 Sobel Y 的差异{DescribeDifferenceStatistics(scharrY,sobelY)});Console.WriteLine($Scharr 梯度幅值{DescribeMat(magnitude)});Console.WriteLine();SavePreview(scharr-src.png,graySource);SavePreview(scharr-sobelx.png,sobelX);SavePreview(scharr-scharrx.png,scharrX);SavePreview(scharr-scharry.png,scharrY);SavePreview(scharr-magnitude.png,magnitude);Console.WriteLine(教学结论Scharr 适合在 3x3 的条件下替代 Sobel 做更细致的一阶导数教学。\n);}/// summary/// 创建教学测试图。/// /summaryprivatestaticMatCreateDemoImage(){varcanvasnewMat(400,400,MatType.CV_8UC3,newScalar(245,242,236));Cv2.Rectangle(canvas,newRect(48,52,122,120),newScalar(80,175,250),-1,LineTypes.AntiAlias);Cv2.Circle(canvas,newPoint(288,104),50,newScalar(128,214,112),-1,LineTypes.AntiAlias);Cv2.Line(canvas,newPoint(52,260),newPoint(350,330),newScalar(60,70,80),5,LineTypes.AntiAlias);Cv2.PutText(canvas,Scharr,newPoint(48,370),HersheyFonts.HersheySimplex,0.9,newScalar(42,40,36),2,LineTypes.AntiAlias);returncanvas;}/// summary/// 保存一个适合观察的单通道预览图。/// /summaryprivatestaticvoidSavePreview(stringfileName,Matimage){usingvarpreviewnewMat();Cv2.Normalize(image,preview,0,255,NormTypes.MinMax,(int)MatType.CV_8UC1);Cv2.ImWrite(fileName,preview);}/// summary/// 描述一个 Mat 的核心信息。/// /summaryprivatestaticstringDescribeMat(Matmat){return$Size{mat.Width}x{mat.Height}, Channels{mat.Channels()}, Type{mat.Type()}, Depth{mat.Depth()};}/// summary/// 描述两个图像的差异。/// /summaryprivatestaticstringDescribeDifferenceStatistics(Matleft,Matright){usingvardiffnewMat();Cv2.Absdiff(left,right,diff);Cv2.MeanStdDev(diff,outvarmean,outvarstddev);Cv2.MinMaxLoc(diff,outdoubleminVal,outdoublemaxVal);return$均值{mean.Val0:F2}, 标准差{stddev.Val0:F2}, 最小值{minVal:F0}, 最大值{maxVal:F0};}}8. 注意事项Scharr只有在 3x3 条件下才是特殊实现。它本质上等价于Sobel(..., FILTER_SCHARR, ...)。输出通常也应该放在 16 位有符号深度里。BORDER_WRAP不支持。9. 调优建议先和Cv2.Sobel的 3x3 结果做对照看。如果想讲更平滑的响应可以同时展示 Sobel 作为参照。如果想讲边缘强度可以再接Cv2.Magnitude。如果想讲方向可以分别看 X 和 Y 方向结果。10. 运行说明如果你在控制台工程里运行本文示例直接把代码放到Program.cs即可。如果你在本仓库里学习请打开 WPF 控件Cv2.Scharr点击“运行场景A”后查看右侧文本框和预览图。WPF 示例会同时展示 Sobel 和 Scharr 的对照结果便于理解差异。11. 常见错误排查把 Scharr 当成一个和 Sobel 完全无关的新函数。以为它能自由调ksize其实它就是 3x3 特例。用CV_8U输出保存导数导致负值丢失。只看 X 方向不看 Y 方向导致边缘理解不完整。

相关文章:

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

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

AMiner:研究生必备 AI 科研工具|文献调研・文献管理・代码复现一站式平台(基于 GLM 大模型)

科研中常遇到文献难找、资料混乱、算法难复现三大难题。AMiner作为一款AI for Science的AI学术科研工具,由清华大学唐杰教授团队研发,介入最新 GLM 大模型,提供文献调研、知识管理、代码辅助一站式服务,覆盖 3.3 亿文献、1.8亿专利…...

一文讲透编程基础的3大核心模块,新手入门再也不迷茫

文章目录前言一、数据结构:程序的骨架,没有它代码就是一盘散沙1.1 为什么AI写的代码你改不动?因为你不懂数据结构1.2 新手必学的5个核心数据结构,多一个都不用先学(1)数组:最基础也最重要的数据…...

【花雕动手做】几美元芯片就能跑的AI Agent:ESP-Claw如何用“聊天”重新定义硬件

当AI Agent突破虚拟世界的边界,开始直接控制物理设备,智能硬件的发展范式正被彻底改写。无需复杂编程,只需一句自然语言,就能让廉价硬件完成预设任务——这不是科幻场景,而是乐鑫科技开源项目ESP-Claw正在落地的现实。 作为一款开源项目,ESP-Claw在GitHub上线仅一个月便…...

0-π量子比特设计原理与拓扑保护机制

1. 0-π量子比特的物理基础与设计挑战 在超导量子计算领域,0-π量子比特因其独特的拓扑保护特性而备受关注。这种量子比特的设计基于两个关键自由度:θ和φ相位变量,分别对应电路中的两个正交振荡模式。与传统transmon比特相比,0-…...

Ubuntu history 命令实用教程(设置记录命令行数或永久记录等)

Ubuntu history 命令实用教程简介一、认识 history 是什么二、查看本机当前历史配置1. 查看当前历史条数限制2. 查看历史文件实际已有多少条记录三、手动设置 history 指定记录行数1. 编辑配置文件2. 写入指定行数配置3. 保存退出并生效四、设置 history 永久不删除&#xff08…...

Overture:一站式AI应用开发框架,快速构建大模型服务

1. 项目概述:一个开箱即用的开源AI应用框架最近在折腾AI应用开发的朋友,估计都绕不开一个核心问题:如何快速、稳定地把一个大语言模型的能力,封装成一个可以对外提供服务的API,甚至是带界面的Web应用。从模型加载、推理…...

VSCode扩展一键克隆Git仓库:告别终端切换,提升开发效率

1. 项目概述:在VSCode里直接克隆仓库,告别终端切换如果你和我一样,每天的工作流都离不开Git和VSCode,那你一定经历过这个场景:在浏览器上看到一个不错的开源项目,复制它的GitHub链接,然后切到终…...

第26课:OpenClaw|日志审计与问题诊断

文章目录26.1 OpenClaw的日志体系与日志级别日志的“两个表面”日志级别的分层逻辑WebSocket日志的三级样式Cache-Trace日志:穿透Agent上下文的黑盒26.2 工作目录中的.jsonl日志文件分析三类关键日志文件读取日志的三种方式三类日志的关联追踪法26.3 结构化日志的收…...

如何在macOS上轻松运行Windows程序?Whisky完整指南教程

如何在macOS上轻松运行Windows程序?Whisky完整指南教程 【免费下载链接】Whisky A modern Wine wrapper for macOS built with SwiftUI 项目地址: https://gitcode.com/gh_mirrors/wh/Whisky 想在macOS上运行Windows专属软件却不想安装虚拟机?Whi…...

基于cursor-maker构建可复用AI指令模板,提升开发效率与代码一致性

1. 项目概述:一个为开发者赋能的AI代码生成工具如果你是一名开发者,尤其是经常在VSCode里写代码的朋友,那么对Cursor这款集成了AI能力的编辑器一定不陌生。它最大的魅力在于,你可以用自然语言描述你的需求,AI就能帮你生…...

ARMv8/9架构中RMR_EL3与SCR_EL3寄存器深度解析

1. ARM架构中的RMR_EL3与SCR_EL3寄存器解析在ARMv8-A/v9架构中,EL3(Exception Level 3)作为最高特权级,负责系统的安全监控和资源隔离。RMR_EL3和SCR_EL3是EL3级别的两个关键系统寄存器,它们共同构成了安全启动和运行时…...

2026学生小提琴实测推荐,1000-2000元按预算抄作业,新手琴童精准适配

作为常年扎根琴行、接触过无数琴童的业内从业者,每年都会整理上百份家长选琴反馈,发现大家选琴的核心痛点始终一致:预算不确定、看不懂材质工艺、怕买太贵闲置浪费、怕选劣质款打击孩子学琴兴趣、怕尺寸不合适毁姿势。其实选学生小提琴没有那…...

2010-2024年省级农村居⺠消费价格指数

本数据为国家统计局编制的官方统计数据,具体编制方法参考国家统计局CPI调查方案及《中国统计年鉴》。农村居民消费价格指数(Consumer Price Index for Rural Residents,简称农村CPI)是综合反映农村居民家庭所购买的生活消费品价格…...

开源阅读鸿蒙版:你的私人数字图书馆,从此不再为找书发愁

开源阅读鸿蒙版:你的私人数字图书馆,从此不再为找书发愁 【免费下载链接】legado-Harmony 开源阅读鸿蒙版仓库 项目地址: https://gitcode.com/gh_mirrors/le/legado-Harmony 你是否曾经为了找一本想看的书,在十几个阅读App之间来回切…...

从编码到网络:GLM模型在图论分析中的实战指南

1. GLM模型与图论分析的完美结合 第一次接触GLM模型是在分析脑网络数据时,当时手头有一批健康人和患者的脑功能连接数据,需要找出两组间的差异。传统方法只能逐个节点比较,效率低下且容易漏掉整体网络特征。直到发现GLM模型可以完美融入图论分…...

陈,嵌入式生物医学电子实验箱 电子创新生物医学试验箱 生物医学工程电子试验箱

由硬件、软件、附件、实验教材四部分组成,模块独立、组合灵活,安徽正华,生物,露硬件覆盖主流模拟与数字电路:模拟电路:集成运放、心电放大、滤波、信号发生等典型电路;数字电路:AVR/…...

综合实战——开发一个“智能标书辅助生成系统“(01需求分析与架构设计)

综合实战——开发一个“智能标书辅助生成系统“ 前言:为什么选择"标书生成"作为实战项目? 在正式开始之前,先回答一个关键问题:为什么选这个场景? 标书(Bid/Proposal)生成是企业中一个真实且高价值的AI应用场景: 痛点明确:写一份标书需要3-5天,且大量内容…...

RocketMQ 入门到原理实战全讲明白了!第二章

文章目录1、客户端消息确认机制2、广播模式详解3、消息过滤机制4、顺序消息机制5、延迟消息、批量消息6、事务消息机制7、ACL 权限控制机制8、SpringBoot 整合 RocketMQ9、RocketMQ 客户端注意事项10、MQ 如何保证消息不丢失11、MQ 如何保证消息的顺序性12、MQ 如何保证消息的幂…...

NotebookLM播客化军规级配置(仅限前500名开发者获取的prompt工程模板+声学环境补偿表)

更多请点击: https://intelliparadigm.com 第一章:NotebookLM播客化军规级配置全景导览 NotebookLM 的播客化(Podcasting)能力并非开箱即用,需通过严格配置激活其语音合成、语义分段与上下文锚定三大核心能力。以下为…...

别再盲目升级!Claude 3 Opus仅在5类高价值场景胜出——基于127家A/B测试企业的ROI数据反推选型决策树

更多请点击: https://intelliparadigm.com 第一章:Claude 3 Opus性能评测的底层逻辑与评估范式 Claude 3 Opus 的性能评测并非简单比拼响应速度或 token 吞吐量,而是一套融合认知建模、任务分解能力与鲁棒性验证的多维评估范式。其底层逻辑建…...

推理服务为什么一加 Stop Sequences 就开始流式看着正常却尾延迟抖动:从 Token Suffix Match 到 Batch Exit 对齐的工程实战

很多团队给推理服务加 stop sequences,原意是让 JSON、工具调用或 SQL 输出在边界处稳稳停住。⚠️ 真进生产后,最先变差的往往不是准确率,而是尾延迟:流式首屏看着正常,GPU 利用率也不低,可 P99 会在高并发…...

SVN的本地提交

一、下载SVN现在你有一个要被管理的文件夹并且下载好了SVN二、受管理的目录下建一个服务器(Server),和要管理的文件夹一级,下图中被红色涂鸦的就是我要管理的文件夹2.1 双击进入svn_Serve的文件夹目录下,接下来如下图操…...

从词嵌入到注意力衰减:一次大模型安全边界的逆向测绘实验

0. 这篇文章是关于什么的这是一份从底层代码出发,亲手搭建实验环境,尝试逆向测绘大模型安全边界的技术笔记。几天前,我在一篇分析Transformer安全机制的文章中提出过一个假设:大模型的安全审查,不是一套离散的、随机的…...

JTAG IDCODE与SWD协议:嵌入式调试核心技术解析

1. JTAG IDCODE机制深度解析在嵌入式系统调试领域,JTAG IDCODE是调试器识别目标设备的核心机制。这个32位寄存器就像设备的"身份证",包含了三个关键信息字段:VERSION(位[31:28]):设备版本代码&am…...

高性能计算能效优化:从异构架构到混合精度实践

1. 高性能计算能效优化的核心挑战在过去的十年里,高性能计算(HPC)系统的能耗问题已经从单纯的运营成本问题演变为制约科学发现速度的关键瓶颈。以欧洲核子研究中心(CERN)的大型强子对撞机(LHC)为…...

3分钟免费搞定百度网盘秒传:永久分享大文件的终极解决方案

3分钟免费搞定百度网盘秒传:永久分享大文件的终极解决方案 【免费下载链接】rapid-upload-userscript-doc 秒传链接提取脚本 - 文档&教程 项目地址: https://gitcode.com/gh_mirrors/ra/rapid-upload-userscript-doc 你是否厌倦了百度网盘分享链接频繁失…...

别再叫我白板了:从一个知识整理的真实痛点,聊产品定位的边界

在效率工具这个赛道上,“白板”已经成为一个拥挤的品类。如果我们只是想做一块更好看、更流畅的在线白板,那说实话,意义不大。市面上已经有足够多的成熟产品,把“无限画布自由表达”这件事做到了很高的水准。但我们在开发和用户调…...

PRAC与RFM隐蔽信道攻击技术解析与实验指南

1. PRAC与RFM隐蔽信道攻击技术解析隐蔽信道攻击(Covert Channel Attack)是信息安全领域一项重要的研究方向,它利用系统共享资源的时序特性实现隐蔽通信。不同于传统网络攻击,这类技术不依赖显式数据传输通道,而是通过操…...

量子混合算法优化带容量约束的车辆路径问题

1. 量子混合算法求解带容量约束的车辆路径问题物流配送优化是供应链管理中的经典难题。想象一下,一家快递公司每天需要向城市各处投递包裹,每辆货车都有载重限制,如何规划路线才能使总运输距离最短?这就是带容量约束的车辆路径问题…...