目录

第一部分 初识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入门的更多相关文章

  1. HTML5图形图像处理技术研究

    摘要:图形图像处理平台大部分是传统的C/S架构的桌面应用程序,维护困难,共享性差,而B/S架构的Web程序具有易维护.易共享的优点.本文研究了基于HTML5的Web图形图像处理技术,用HTML5实现了 ...

  2. GDI+图形图像处理技术中Pen和Brush的简单使用和简单图形的绘制(C#)

    1.Graphics Graphics对象是GDI+绘图表面,因此在Windows窗体应用程序中要使用GDI+创建绘图,必须要先创建Graphics.在给窗体注册一个Paint事件后,Graphics ...

  3. FPGA与数字图像处理技术

    数字图像处理方法的重要性源于两个主要应用领域: 改善图像信息以便解释. 为存储.传输和表示而对图像数据进行处理,以便于机器自动理解. 图像处理(image processing): 用计算机对图像进行 ...

  4. ASP.NET WebApi技术从入门到实战演练

    一.课程介绍 曾经有一位不知名的讲师说过这么一句名言: 一门RPC技术不会,那么千万万门RPC技术将都不会!在今天移动互联网的时代,作为攻城师的我们,谁不想着只写一套API就可以让我们的Web, An ...

  5. 单细胞RNA测序技术之入门指南

    单细胞RNA测序技术之入门指南 [字体: 大 中 小 ] 时间:2018年09月12日 来源:生物通   编辑推荐: 在这个飞速发展的测序时代,DNA和RNA测序已经逐渐成为“实验室中的家常菜”.若要 ...

  6. AJPFX技术分析入门

    AJPFX:技术分析入门 技术分析就是指通过考察历史数据来预测未来价格走向.外汇市场是非常讲技术分析的,而且分析师的基本功就是技术分析,但是,没有对基本面的准确把握,技术分析就会含糊.但是技术分析究其 ...

  7. java基础-网络编程(Socket)技术选型入门之NIO技术

    java基础-网络编程(Socket)技术选型入门之NIO技术 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.传统的网络编程 1>.编写socket通信的MyServer ...

  8. 数字图像处理技术在TWaver可视化中的应用

    数字图像处理(Digital Image Processing)又称为计算机图像处理,它是指将图像信号转换成数字信号并利用计算机对其进行处理的过程.常用的图像处理方法有图像增强.复原.编码.压缩等,数 ...

  9. 路由其实也可以很简单-------Asp.net WebAPI学习笔记(一) ASP.NET WebApi技术从入门到实战演练 C#面向服务WebService从入门到精通 DataTable与List<T>相互转换

    路由其实也可以很简单-------Asp.net WebAPI学习笔记(一)   MVC也好,WebAPI也好,据我所知,有部分人是因为复杂的路由,而不想去学的.曾经见过一位程序猿,在他MVC程序中, ...

  10. php图形图像处理技术

    图形图像处理技术,gd库的强大支持,PHP的图像可以是PHP的强项,PHP图形化类库,jpgraph是一款非常好用的强大的图形处理工具. 在PHP中加载GD库 gd官方网址下载: http://www ...

随机推荐

  1. gRPC入门学习之旅(六)

    gRPC入门学习之旅(一) gRPC入门学习之旅(二) gRPC入门学习之旅(三) gRPC入门学习之旅(四) gRPC入门学习之旅(五) 3.3.客户端编译生成GRPC类 1. 在"解决方 ...

  2. 使用ISS服务器方式跑C#程序

    使用ISS服务器方式跑C#程序 VS2010,临时接了一个C#系统的小系统,需要本地调试跑一下 但是老是在conn.open提示06413,简单来说就是连接不上数据库 尝试了很多方法,最后还是决定配置 ...

  3. 第11課-Channel Study For Create Custom Restful Service

    这节课我们一起学习利用Mirth Connect的HTTP Listener源通道与JavaScript Writer目的通道搭建自定义Restful风格webapi服务. 1.新建名为'Custom ...

  4. 企业版Spark Databricks + 企业版Kafka Confluent 联合高效挖掘数据价值

    ​简介:本文介绍了如何使用阿里云的Confluent Cloud和Databricks构建数据流和LakeHouse,并介绍了如何使用Databricks提供的能力来挖掘数据价值,使用Spark ML ...

  5. 平台建设的7大问题:蚂蚁AI平台实践深度总结

    简介: 在支持蚂蚁几乎所有核心业务运行和发展的过程中,我们在平台建设.业务支持.平台运营.AI创新以及AI整体运营等各个方面做了很多尝试,有了不少的收获和感悟,在此分享给大家. 过去几年,我和团队一直 ...

  6. 网关流控利器:结合 AHAS 实现 Ingress/Nginx 流量控制

    ​简介:微服务的稳定性一直是开发者非常关注的话题.随着业务从单体架构向分布式架构演进以及部署方式的变化,服务之间的依赖关系变得越来越复杂,业务系统也面临着巨大的高可用挑战. 作者:涂鸦 微服务的稳定性 ...

  7. 工业视觉智能实战经验之IVI算法框架2.0

    ​简介: 工业视觉智能团队在交付了多个工业视觉智能质检项目后,发现了工业视觉智能的共性问题和解法,打造了工业视觉智能平台,通过平台的方式积累和提升工业视觉的通用能力.在平台建设上最核心的能力是算法能力 ...

  8. WPF 通过 GetMessageExtraInfo 方法获取当前收到的鼠标消息是否由触摸转换过来

    本文将告诉大家如何在 WPF 或者其他 Win32 应用里面,在收到鼠标消息时,通过 GetMessageExtraInfo 方法获取当前收到的鼠标消息是否由触摸消息提升而来 大家都知道,在不开启 W ...

  9. WPF 获取全局所有窗口的创建显示事件 监控窗口打开

    本文将告诉大家如何在 WPF 里面进行全局监控任意的窗口创建显示打开,可以获取到每个 WPF 窗口的打开的时机.如此可以用来辅助定位问题和输出日志 这篇博客是有背景的,老司机告诉我说他的应用不响应鼠标 ...

  10. 07. rails 创建user模型

    rails帮助命令 rails -h 创建user模型 命令行 haima@haima-PC:/media/haima/34E401CC64DD0E28/site/go/src/ruby/circle ...