图像处理技术OpencvSharp入门
目录
第一部分 初识Opencv
1.C# 下Opencv库
2.安装OpenCvSharp
第二部分 OpencvSharp入门
1.加载图像文件
2.显示图像
第三部分 基础应用
1.颜色转换
2.尺寸调整
3.二值化
4.四则运算
5.颜色分割
6.直线检测
初识Opencv
C# 下使用Opencv 库
•在.NET下常用OpenCV进行图像处理工作,常用的.NET下的OpenCV库有Emgu CV和OpenCVSharp。
• Emgu CV是.NET平台下对OpenCV图像处理库的封装,也就是.NET版的OpenCV。由于OpenCV是用C和C++编写的,Emgu用C#对其进行封装,允许用.Net语言来调用OpenCV函数,如C#、VB、VC++等。
•OpenCvSharp 是一个OpenCV的.Net wrapper,应用最新的OpenCV库开发,使用习惯比EmguCV更接近原始的OpenCV,有详细的使用样例供参考。该库采用LGPL发行,对商业应用友好。使用OpenCvSharp,可用C#,VB.NET等语言实现多种流行的图像处理(image processing)与计算机视觉(computer vision)算法。
•使用VS2022新建一个.net6窗体项目。
•搜索安装opencvsharp4,安装OpenCvSharp4.Windows包。


OpencvSharp入门
加载图像文件
•创建一个帮助类OpencvHelper,后面都在此类中实现功能
•首先 usingOpenCvSharp;
•如何加载一个图像,返回Mat对象
•Mat mat= Cv2.ImRead(fileName, ImreadModes.Color);//加载为彩色图像,结果是三通道
•Mat mat= Cv2.ImRead(fileName, ImreadModes.Grayscale);//加载为灰度图像,结果是单通道,彩色的默认转灰色
•Mat mat= Cv2.ImRead(fileName, ImreadModes.AnyColor);//加载任意图像,结果随图像,灰色或者彩色。
Cv2.ImShow(“窗口名称”, mat);//mat是将要显示的Mat对象,
此处显示Mat对象必须是BGR格式,其他像素格式,需要转回BGR格
式再显示
•Cv2.WaitKey();//用于Cv2.ImShow的等待。没有此句则立即执行下一行代码

颜色转换
•Mat mat = Cv2.ImRead(fileName, ImreadModes.Color);
•Mat gray= newMat();
Cv2.CvtColor(mat, gray, ColorConversionCodes.BGR2GRAY);

•Mat mat = Cv2.ImRead(fileName, ImreadModes.Color);
•Mat hsv= newMat();
Cv2.CvtColor(mat, gray, ColorConversionCodes.BGR2HSV);//BGR转HSV格式
重点:ColorConversionCodes枚举
尺寸调整
•Mat result = newMat();
•Cv2.Resize(mat, result, newOpenCvSharp.Size(100,100));
•重点:Cv2.Resize方法,有多个重载

二值化
•Mat gray = newMat();
•Cv2.CvtColor(mat, gray, ColorConversionCodes.BGR2GRAY);//转灰度图
•Scalarscalar = Cv2.Mean(gray);//计算灰度图平均值
•Cv2.Threshold(gray, gray, scalar.Val0, 255, ThresholdTypes.Binary);//二值化

四则运算
•原则:通道相同,尺寸相同,才能运算。
Cv2.BitwiseAnd//与预算
Cv2.BitwiseNot//取反运算
Cv2.BitwiseOr //或运算
Cv2.BitwiseXor //异或运算
Cv2.Add//两图相加
Cv2.Subtract//两图相减
Cv2.Multiply //乘法
Cv2.Divide //除法
颜色分割

•// HSV:H颜色范围
•// Orange 0 - 22
•//Yellow 22 - 38
•// Green 38 - 75
•// Blue 75 - 130
•// Violet 130 - 160
•// Red 160 - 179
•下面示例实分割红色区域代码
public static Mat GetColor(Mat mat){
•Cv2.ImShow("mat", mat);
•Mat hsv = newMat();//HSV格式对象
•Cv2.CvtColor(mat,hsv, ColorConversionCodes.BGR2HSV);//颜色转换
•var mask = hsv.InRange(newScalar(0, 46, 46), newScalar(29, 255, 255));//红色区域
•varmask2 = hsv.InRange(newScalar(165, 46, 46), newScalar(180, 255, 255));//红色区域
•Cv2.BitwiseOr(mask, mask2, mask);//范围叠加
•Cv2.BitwiseNot(mask, mask);//取反,黑白颜色反过来
•Cv2.ImShow("mask", mask);
•Mat mat1 = newMat();
•Cv2.CvtColor(mask, mat1, ColorConversionCodes.GRAY2BGR);//灰度图转彩色图,
•Cv2.Add(mat, mat1, mat1);//与原图相加,获取红色的区域
•Cv2.ImShow("mat1", mat1);
•Cv2.WaitKey();
•returnmat1;
}
直线检测
Cv2.ImShow("mat", mat);
Mat gray = ConvertToBlackBinary(mat);
Cv2.ImShow("二值化", gray);
varkenal3 = Cv2.GetStructuringElement(MorphShapes.Rect, newOpenCvSharp.Size(2, 2));
Cv2.Dilate(gray, gray, kenal3);//
Cv2.ImShow("二值化Dilate", gray);
Cv2.Canny(gray, gray, 50, 150);
Cv2.ImShow("Canny", gray);
varlines = Cv2.HoughLinesP(gray, 1, Math.PI / 180, 100, 250, 50);
if (lines.Length > 0)
{
for (int i = 0; i < lines.Length; i++)
{
Cv2.Line(mat, lines[i].P1, lines[i].P2,newScalar(255,0,0),1, LineTypes.AntiAlias);
}
}
Cv2.ImShow("结果", mat);
return mat;
欢迎加入QQ群交流群进行技术交流,
本文项目代码地址:
OpenCvSharpStudy: OpenCvSharp学习实践项目 (gitee.com)
图像处理技术OpencvSharp入门的更多相关文章
- HTML5图形图像处理技术研究
摘要:图形图像处理平台大部分是传统的C/S架构的桌面应用程序,维护困难,共享性差,而B/S架构的Web程序具有易维护.易共享的优点.本文研究了基于HTML5的Web图形图像处理技术,用HTML5实现了 ...
- GDI+图形图像处理技术中Pen和Brush的简单使用和简单图形的绘制(C#)
1.Graphics Graphics对象是GDI+绘图表面,因此在Windows窗体应用程序中要使用GDI+创建绘图,必须要先创建Graphics.在给窗体注册一个Paint事件后,Graphics ...
- FPGA与数字图像处理技术
数字图像处理方法的重要性源于两个主要应用领域: 改善图像信息以便解释. 为存储.传输和表示而对图像数据进行处理,以便于机器自动理解. 图像处理(image processing): 用计算机对图像进行 ...
- ASP.NET WebApi技术从入门到实战演练
一.课程介绍 曾经有一位不知名的讲师说过这么一句名言: 一门RPC技术不会,那么千万万门RPC技术将都不会!在今天移动互联网的时代,作为攻城师的我们,谁不想着只写一套API就可以让我们的Web, An ...
- 单细胞RNA测序技术之入门指南
单细胞RNA测序技术之入门指南 [字体: 大 中 小 ] 时间:2018年09月12日 来源:生物通 编辑推荐: 在这个飞速发展的测序时代,DNA和RNA测序已经逐渐成为“实验室中的家常菜”.若要 ...
- AJPFX技术分析入门
AJPFX:技术分析入门 技术分析就是指通过考察历史数据来预测未来价格走向.外汇市场是非常讲技术分析的,而且分析师的基本功就是技术分析,但是,没有对基本面的准确把握,技术分析就会含糊.但是技术分析究其 ...
- java基础-网络编程(Socket)技术选型入门之NIO技术
java基础-网络编程(Socket)技术选型入门之NIO技术 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.传统的网络编程 1>.编写socket通信的MyServer ...
- 数字图像处理技术在TWaver可视化中的应用
数字图像处理(Digital Image Processing)又称为计算机图像处理,它是指将图像信号转换成数字信号并利用计算机对其进行处理的过程.常用的图像处理方法有图像增强.复原.编码.压缩等,数 ...
- 路由其实也可以很简单-------Asp.net WebAPI学习笔记(一) ASP.NET WebApi技术从入门到实战演练 C#面向服务WebService从入门到精通 DataTable与List<T>相互转换
路由其实也可以很简单-------Asp.net WebAPI学习笔记(一) MVC也好,WebAPI也好,据我所知,有部分人是因为复杂的路由,而不想去学的.曾经见过一位程序猿,在他MVC程序中, ...
- php图形图像处理技术
图形图像处理技术,gd库的强大支持,PHP的图像可以是PHP的强项,PHP图形化类库,jpgraph是一款非常好用的强大的图形处理工具. 在PHP中加载GD库 gd官方网址下载: http://www ...
随机推荐
- 中间件之Mycat
一.概念 介绍 Mycat是开源的.活跃的.基于Java语言编写的MySQL数据库中间件.可以像使用mysql一样来使用mycat,对于开发人员来说根本感觉不到mycat的存在 Mycat不负责存储数 ...
- 在RockyLinux 9.2环境中编译CockroachDB 23.1
目的 CockroachDB自 23.1开始,编译模式逐步放弃了Makefile,改用Bazel构建.实际上在23.1代码执行make buildshort 能够成功,但make build应该就会因 ...
- Oracle SQL 常用的将varchar数据处理成number的正则
Oracle SQL 常用的数据处理正则 去除所有的空格 replace(t.dxmz,chr(32),'') 匹配非纯数字 not regexp_like(t.zgbs,'^[[:digit:]]* ...
- Oracle 查询超级慢之buffer sort
查询超级慢之buffer sort 在视图中增加了一个临时表作为一个数据源进行id和名称的转换,没加的时候一秒不到,加了以后14秒,感觉有点问题,于是打开了解释计划看了下,发现这个buffer sor ...
- 力扣61(java&python)-旋转链表(中等)
题目: 给你一个链表的头节点 head ,旋转链表,将链表每个节点向右移动 k 个位置. 示例1: 输入:head = [1,2,3,4,5], k = 2 输出:[4,5,1,2,3] 示例2: 输 ...
- PolarDB-X 全局Binlog解读之性能篇(上)
简介: 本篇来介绍一下PolarDB-X全局binlog在性能方面的一些设计和思考,先通过几个实际的测试案例来展示全局binlog的性能情况,然后结合这些案例来深入讲解全局binlog关于优化的故事. ...
- 一种关于低代码平台(LCDP)建设实践与设计思路
简介: 作者在负责菜鸟商业中心CRM系统开发过程中发现有一个痛点:业务线很多,每个业务线对同一个页面都有个性化布局和不同的字段需求,而他所在的团队就3个人,那么在资源有限的情况下该如何支撑呢?本文就降 ...
- 使用 rocketmq-spring-boot-starter 来配置、发送和消费 RocketMQ 消息
简介: 本文将 rocktmq-spring-boot 的设计实现做一个简单的介绍,读者可以通过本文了解将 RocketMQ Client 端集成为 spring-boot-starter 框架的开发 ...
- TSDB时序数据库时序数据压缩解压技术浅析
简介: 目前,物联网.工业互联网.车联网等智能互联技术在各个行业场景下快速普及应用,导致联网传感器.智能设备数量急剧增加,随之而来的海量时序监控数据存储.处理问题,也为时序数据库高效压缩.存储数据能 ...
- dotnet 在国产 UOS 系统利用 dotnet tool 工具做文件传输
我在一台设备上安装了 UOS 系统,但是我如何在我的主开发设备上和 UOS 系统传输文件?通过 dotnet tool 工具可以完成大部分的工作,当然,使用 dotnet tool 不仅做文件传输,还 ...