C#调用OpenCvSharp和SkiaSharp绘制图像直方图

  最近在B站上学习OpenCv教程,学到图像直方图,后者描述的是不同色彩在整幅图像中所占的比例(统计不同色彩在图像中的出现次数),可以对灰度图、彩色图等计算并绘制图像直方图。本文学习OpenCvSharp中与计算直方图相关的函数,并采用SkiaSharp绘制简单的直方图。
  新建Winfrom项目,在Nuget包管理器中搜索并安装以下包:

OpenCvSharp4
OpenCvSharp4.Extensions
OpenCvSharp4.Windows
SkiaSharp
SkiaSharp.Views.Forms
SkiaSharp.Views.Forms.WPF
SkiaSharp.Views.WPF

  主要使用OpenCvSharp模块中的以下函数处理并计算图像直方图:
  1)Cv2.ImRead:从本地加载图像;
  2)Cv2.Split:将多通道图像数据集合拆分成单通道图像数据集合;
  3)Cv2.CalcHist:计算图像直方图,其函数原型如下所示,各个参数的意义详见参考文献3。

public static void CalcHist(Mat[] images, int[] channels, InputArray? mask, OutputArray hist, int dims, int[] histSize, Rangef[] ranges, bool uniform = true, bool accumulate = false)

  4)Cv2.Normalize:对直方图数据进行归一化处理。
  以下是主要代码,由于接触OpenCvSharp不多,主要参照参考文献中的示例代码加上个人理解编写的代码,不确定用法是否正确。

Mat image = Cv2.ImRead(picImage.Tag.ToString());
Mat[] channels = Cv2.Split(image);int channelIndex = -1;
if (rbB.Checked)
{m_channel = 0;
}
else if (rbG.Checked)
{m_channel = 1;
}
else if (rbR.Checked)
{m_channel = 2;
}m_size = Convert.ToInt32(txtSize.Text);OpenCvSharp.Rangef range = new OpenCvSharp.Rangef(0, 256);Mat outputArray = new Mat();
Cv2.CalcHist(channels, new int[] { m_channel }, null, outputArray, 1, new int[] { m_size }, new OpenCvSharp.Rangef[] { range });
Cv2.Normalize(outputArray, outputArray, 0, outputArray.Rows, NormTypes.MinMax, -1);

  最后使用SkiaSharp的SKControl控件绘制简单的直方图,主要代码如下所示:

SKCanvas canvas = e.Surface.Canvas;
canvas.Clear();SKPaint pen = new SKPaint();
switch (m_channel)
{case 0:pen.Color = SKColors.Blue;break;case 1:pen.Color = SKColors.Green;break;case 2:pen.Color = SKColors.Red;break;default:pen.Color = SKColors.Black;break;
}pen.StrokeWidth = 1;
pen.Style = SKPaintStyle.Stroke;double temp = 0;
for (int i = 0; i < m_size; i++)
{canvas.DrawLine(50 + i, 300, 50 + i, 300 - m_mat.At<float>(i), pen);
}

  最后是程序效果,如下图所示:
在这里插入图片描述

参考文献:
[1]https://baike.baidu.com/item/%E9%A2%9C%E8%89%B2%E7%9B%B4%E6%96%B9%E5%9B%BE/5194952?fr=ge_ala
[2]https://www.bilibili.com/video/BV1DT421m7S8?p=5&vd_source=db4a1f65c18549c78df3e9d579e59e19
[3]https://blog.csdn.net/TyroneKing/article/details/129279978
[4]https://www.jianshu.com/p/fe5fd81f22d4

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

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

相关文章

PS插件创成式填充功能全面测评:轻松实现AI修图新高度

大家好&#xff0c;我是你们的AIGC测评博主。今天&#xff0c;我将为大家带来一款ps插件创成式填充功能——深度体验 在图像处理领域&#xff0c;AI技术的应用已经越来越广泛。而创成式填充功能&#xff0c;无疑是其中的佼佼者。它利用AI技术&#xff0c;能够根据用户输入的关…

数据库系统概论(个人笔记)(第四部分)

数据库系统概论&#xff08;个人笔记&#xff09; 文章目录 数据库系统概论&#xff08;个人笔记&#xff09;4、中间的SQL4.1 连接表达式4.2 视图4.3 事务4.4 完整性约束4.5 SQL数据类型和模式4.6 SQL中的索引定义4.7 授权 4、中间的SQL 4.1 连接表达式 Join Expressions Join…

使用mysqldump导出mysql数据库的数据

使用mysqldump导出mysql数据库的数据 mysqldump是mysql自带的一个工具&#xff0c;路径一般是C:\Program Files\MySQL\MySQL Server 5.7\bin\mysqldump.exe 有点需要导出的数据库&#xff0c;选择导入/导出&#xff0c;选择用mysqldump导出 在使用 IntelliJ IDEA 通过 mysqldum…

车载ADAS面试题,零基础也能看得懂!

周一来刷刷ADAS相关的面试题吧&#xff01;相信看完这些题目&#xff0c;你会对ADAS有个更清晰的认识&#xff0c;即使你是零基础也可以轻松明白&#xff01; 1、描述 ADAS 系统的基本组成和功能 答案&#xff1a;高级驾驶辅助系统&#xff08;ADAS&#xff09;是一套融合了多种…

Mathtype插入word,以及mathtype在word上的卸载

1.Mathtype插入word 花了两个小时&#xff0c;最终得出的极品简单的安装方法&#xff01;&#xff01;&#xff01;&#xff01;&#xff01; mathype下载地址&#xff1a;https://store.wiris.com/zh/products/mathtype/download/windows 下载完傻瓜式安装&#xff0c;不要…

CAD二次开发(9)- CAD中对象的实时选择

1. 点的拾取 有时候我们需要在CAD画布上实时选取起始点和结束点&#xff0c;然后绘制出来一条直线。实现如下&#xff1a; public void getPoint(){var doc Application.DocumentManager.MdiActiveDocument;var editor doc.Editor;var docDatabase doc.Database;PromptPoi…

手写操作系统

对喜欢操作系统的伙伴强推一门课程 从0开始实现了支持文件系统、任务切换和网络协议栈的操作系统。 具体见 &#xff1a;http://www.ziyuanwang.online/977.html

三星(中国)投资公司线上入职测评笔试邀请数字推理语言逻辑真题题库

三星&#xff08;中国&#xff09;有限公司北京分公司 邀请您参加 SHL线上笔试 具体安排如下&#xff1a; 笔试时间&#xff1a;周三 9:00 笔试时长&#xff1a;1.5h ~ 2h 笔试内容及要求&#xff1a;数字推理限时30min&#xff1b;语言逻辑限时30min&#xff1b;性格测试不…

重学java 72.正则表达式

人长大之后就在频繁地离别&#xff0c;相聚反而时日无多 —— 24.6.17 一、正则表达式的概念及演示 1.概述 正则表达式是一个具有特殊规则的字符串 2.作用&#xff1a;校验 3.String中有一个校验正则的方法&#xff1a; boolean matches(String regex) —— 校验字符串是否…

【雷丰阳-谷粒商城 】【分布式基础篇-全栈开发篇】【10】【仓库管理】【分布式基础篇总结】

持续学习&持续更新中… 守破离 【雷丰阳-谷粒商城 】【分布式基础篇-全栈开发篇】【10】【仓库管理】【分布式基础篇总结】 采购简要流程采购单采购人员的接口分布式基础篇总结参考 采购简要流程 采购单 可以搞个枚举&#xff1a; public class WareConstant {public enu…

Langchain-chatchat: Langchain基本概念

一、Langchain的chain是指的是什么&#xff1f; langchain字面意思是长长的链子&#xff0c;那么chains 链子具体指的是什么呢&#xff1f; 智普AI助手的回答如下&#xff1a; LangChain 中的 “chain” 是指链式操作或者序列化操作&#xff0c;它是一种将多个任务或操作按照…

【有用】docker在windows下使用详情

在Windows下安装和使用Docker可以按照以下步骤进行&#xff1a; 安装 Docker Desktop 系统要求 • Windows 10 64-bit: Pro, Enterprise, or Education (1607 Anniversary Update, Build 14393 or later) • Windows 11 64-bit: Pro, Enterprise, or Education • Windows 10 …

DPDK环境配置

DPDK环境配置 DPDK&#xff08;Data Plane Development Kit&#xff09;是一个开源的软件框架&#xff0c;最初由Intel开发&#xff0c;旨在提升数据包处理性能&#xff0c;尤其是在Intel架构的处理器上。它允许开发者在用户空间&#xff08;user space&#xff09;而不是传统…

Excel批量删除括号里内容,帮你轻松应对!

某次&#xff0c;刘小生从系统导出的人员信息中&#xff0c;“姓名”字段信息中包含了工号信息&#xff0c;需要将“原姓名”中的“工号、括号”信息删除&#xff0c;如果一个一个删除工作量很大&#xff0c;刘小生想到可以用“通配符*”批量替换&#xff0c;解放双手&#xff…

飞天茅台酒的惊魂五日

“电商百亿补贴修改发货规则”导致黄牛资金压力剧增&#xff0c;资金压力之下部分黄牛择低价甩卖&#xff0c;其他求货的酒行、大酒商则选择观望&#xff0c;价格下行压力最终扩散&#xff0c;造成整个回收市场踩踏&#xff0c;价格急速下跌。 不到半年时间&#xff0c;飞天茅台…

初学者必看的web前端开发学习路线,干货满满!

初学者必看的web前端开发学习路线,干货满满&#xff01; 随着互联网的深入发展,前端工程师这个岗位在市场上的需求&#xff0c;薪资也是很可观的。前端很火&#xff0c;想自学前端的人也很多。包括一些学生、上班族、以前的UI&#xff0c;java&#xff0c;或完全零基础&#xf…

免费无版权可商用资源|自媒体创业者、设计师、电商商家必备

1.前言 小伙伴们大家好&#xff0c;欢迎来到天夏Ai&#xff0c;这里专注于分享人工智能精品资源&#xff1a;Ai副业项目、Ai效率神器&#xff01;和你一起共享Ai信息&#xff0c;分享Ai副业项目资源&#xff0c;开启智能副业赚钱新时代&#xff01; 今天为大家分享免费无版权可…

Web 前端开发趋势

前端开发领域&#xff0c;新技术、开发趋势、库和框架不断涌现&#xff0c;变化并不陌生。最近发生的一些事件正在改变开发人员构建网站和 Web 应用的方式 虽然跟上前端生态系统的变化可能具有挑战性&#xff0c;但作为专业人士&#xff0c;保持技能的更新有助于我们开展工作。…

PBC密码库安装及使用教程

文章目录 1.PBC库介绍2.PBC库安装3.PBC库使用4.相关API4.1 配对的初始化和释放4.2 元素的初始化和释放4.3 元素的赋值4.4 哈希4.5 元素的常用运算4.6 元素的幂运算4.7 元素的比较4.8 从群中随机选取一个元素&#xff08;常用&#xff09;4.9 配对的运算4.10 小结 5.Some exampl…

RocketMQ源码学习笔记:NameServer启动流程

这是本人学习的总结&#xff0c;主要学习资料如下 马士兵教育rocketMq官方文档 目录 1、Overview2、NameServer启动流程2.1、总结2.2、NamesrvController2.2.1、主要职责2.2.2、关键的成员变量2.2.3、核心代码2.2.4、值得注意的点 1、Overview NameServer主要就做三件事 Nam…