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是一样的,常用函数都能找到。