OpenCV在C#中使用基础(OpenCVSharp)
关于OpenCVSharp
以前做图像处理的算法开发的时候,一直都是再用C++和opencv,说实话我的C++学的不怎么样,封装dll等也都挺麻烦的。后来不怎么开发C++了,开始投入Python、C#等的开发。
一直觉得C#是一门比C++更灵活好学,比Python更加规范与传统,感觉很适合我。但是在图像处理这块,一直没有很好的图像处理库。
以前搜过,发现EmguCV是opencv在C#中的替代品,但是貌似学起来挺难的,后来又发现了 AForge.Net,结合C#貌似很不错的,还发现了OpenCVSharp,就是一个用其是OpenCV的.NET wrapper,它比Emgucv更接近于原始的OpenCV。
这次先主要介绍一下OpenCVSharp的一些基础操作
安装OpenCVSharp
敲码OpenCVSharp
命名空间要引用:using OpenCvSharp;
例如(有点闲的慌):
//NameSpace: CVSharp
//FileName: CVSharp
//Create By: raink
//Create Time: 2019/9/27 14:24:08
using 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);
}
}
}
运行结果如下: