今天给大家推荐一个.NET 开发的用于图像处理和计算机视觉的开源库OpenCvSharp4。它提供了丰富的功能和算法,可以帮助开发人员快速实现各种图像处理任务。
OpenCvSharp4用最新的OpenCV库开发,使用习惯比EmguCV更接近原始的OpenCV,有详细的使用样例供参考。该库采用LGPL发行,对商业应用友好。使用OpenCvSharp,可实现多种流行的图像处理(image processing)与计算机视觉(computer vision)算法。
安装OpenCvSharp4
.NET CLI方式
代码语言:javascript复制dotnet add package OpenCvSharp4.Extensions --version 4.8.0.20230708
dotnet add package OpenCvSharp4.Windows --version 4.8.0.20230708
Package Manager方式
代码语言:javascript复制Install-Package OpenCvSharp4.Extensions -Version 4.8.0.20230708
Install-Package OpenCvSharp4.Windows -Version 4.8.0.20230708
注意:OpenCvSharp4 和 OpenCvSharp4.runtime.win 不用安装,只要安装 OpenCvSharp4 .Windosw 即可。OpenCvSharp4.Windows 已经把这两个都打包进去了。
开始使用
一个简单的例子
代码语言:javascript复制using OpenCvSharp;
class Program
{
static void Main()
{
using var src = new Mat("lenna.png", ImreadModes.Grayscale);
using var dst = new Mat();
Cv2.Canny(src, dst, 50, 200);
using (new Window("src image", src))
using (new Window("dst image", dst))
{
Cv2.WaitKey();
}
}
}
上述代码中,Mat 和 MatExpr 等类的对象具有非托管资源,这意味着它们在垃圾回收器之外进行内存管理。因此,在使用完这些对象后,需要手动调用 Dispose() 方法来释放它们。
最糟糕的是, 、-、* 等运算符每次都会创建新的对象。如果这些对象没有被释放,就会导致内存泄漏。
using 语法可以帮助我们自动释放 Mat 和 MatExpr 等对象,从而避免内存泄漏。但是,如果我们使用运算符来对这些对象进行操作,则仍然需要手动释放结果对象。
那么有没有更好的办法处理释放对象的问题呢?答案是肯定的。那就是使用ResourcesTracker。因为 ResourcesTracker 类实现了 IDisposable 接口,因此我们可以在 using 语句中使用ResourcesTracker 来处理对象的释放问题。如下代码:
代码语言:javascript复制using (var t = new ResourcesTracker())
{
Mat mat1 = t.NewMat(new Size(100, 100), MatType.CV_8UC3, new Scalar(0));
Mat mat3 = t.T(255-t.T(mat1*0.8));
Mat[] mats1 = t.T(mat3.Split());
Mat mat4 = t.NewMat();
Cv2.Merge(new Mat[] { mats1[0], mats1[1], mats1[2] }, mat4);
}
using (var t = new ResourcesTracker())
{
var src = t.T(new Mat(@"lenna.png", ImreadModes.Grayscale));
var dst = t.NewMat();
Cv2.Canny(src, dst, 50, 200);
var blurredDst = t.T(dst.Blur(new Size(3, 3)));
t.T(new Window("src image", src));
t.T(new Window("dst image", blurredDst));
Cv2.WaitKey();
}
OpenCvSharp4更多的使用方法,可以参阅示例和 Wiki 页面。所有连接在文末!
资源获取方式
源码:
https://github.com/shimat/opencvsharp
示例:
https://github.com/shimat/opencvsharp_samples/
Wiki:
https://github.com/shimat/opencvsharp/wiki