当前位置: 代码迷 >> 综合 >> 「图像处理」OpenCV在C#中使用基础(OpenCVSharp)
  详细解决方案

「图像处理」OpenCV在C#中使用基础(OpenCVSharp)

热度:84   发布时间:2023-12-07 05:35:27.0

1、关于OpenCVSharp

以前做图像处理的算法开发的时候,一直都是再用C++和opencv,说实话我的C++学的不怎么样,封装dll等也都挺麻烦的。后来不怎么开发C++了,开始投入Python、C#等的开发。

一直觉得C#是一门比C++更灵活好学,比Python更加规范与传统,感觉很适合我。但是在图像处理这块,一直没有很好的图像处理库。

以前搜过,发现EmguCV是opencv在C#中的替代品,但是貌似学起来挺难的,后来又发现了 AForge.Net,结合C#貌似很不错的,还发现了OpenCVSharp,就是一个用其是OpenCV的.NET wrapper,它比Emgucv更接近于原始的OpenCV。

这次先主要介绍一下OpenCVSharp的一些基础操作

2、安装OpenCVSharp

1、使用VS的话,使用nuget进行搜索安装就好,个人建议安装OpenCvSharp3-AnyCPU 。

2、另一种方法呢就是去官网直接下载,然后引用“OpenCvSharp.dll”到依赖中

3、敲码OpenCVSharp

命名空间要引用:using OpenCvSharp;

例如(有点闲的慌):

//NameSpace:    CVSharp
//FileName:     CVSharp
//Create By:    raink
//Create Time:  2019/9/27 14:24:08using System;
using System.Collections.Generic;
using System.Text;
using OpenCvSharp;namespace CVSharp
{class CVSImage{private string path;/// <summary>/// 图像文件的全路径/// </summary>public string Path { get => path; set => path = value; }private int width;/// <summary>/// 图像的宽/// </summary>public int Width { get => width; }private int height;/// <summary>/// 图像的高/// </summary>public int Height { get => height; }private long size;/// <summary>/// 图像的尺寸 size = width * height/// </summary>public long Size { get => size; }/*-----------------------------------------------------------------*/private Mat srcImg;public CVSImage(){path = "";width = 0;height = 0;size = 0;srcImg = new Mat();}public CVSImage(string imagePath, int readMode=1){path = imagePath;srcImg = Cv2.ImRead(path, (ImreadModes)readMode);width = srcImg.width;height = srcImg.height;size = width * height;}/*-----------------------------------------------------------------*//// <summary>/// 预览图像/// </summary>/// <param name="winName">窗口名</param>/// <param name="windowType">0-Normal(可调窗口尺寸),1-Autosize(图像原始大小)</param>/// <param name="showTime">窗口停留时间(0则一直等待输入)</param>/// <returns>异常返回-1,正常返回1</returns>public int showImage(string winName, int windowType=1, int showTime=0){if (srcImg == null || showTime < 0){return -1;}WindowMode mode = (WindowMode)windowType;Cv2.NamedWindow(winName, mode);Cv2.ImShow(winName, srcImg);Cv2.WaitKey(showTime);return 0;}}
}

然后再主函数里面调用一下:

using System;
using CVSharp;namespace CVSharp
{class Program{static void Main(string[] args){CVSImage cvImage = new CVSImage("D:\\Asuna.jpg");Console.WriteLine("image width: {0}", cvImage.Width);Console.WriteLine("image height: {0}", cvImage.Height);cvImage.showImage("Asuna", 0);}}
}

运行结果如下:


其实OpenCVSharp使用起来的感觉和在C++上使用opencv是一样的,常用函数都能找到。