OpenCvSharp 的旧版本存储在 opencvsharp_2410。
NuGet
托管库
包名 | 描述 | 链接 |
---|---|---|
OpenCvSharp4 | OpenCvSharp 核心库 | |
OpenCvSharp4.Extensions | GDI+ 扩展 | |
OpenCvSharp4.WpfExtensions | WPF 扩展 | |
OpenCvSharp4.Windows | Windows 的一体化包(除 UWP 外) |
原生绑定
需要原生绑定(OpenCvSharpExtern.dll / libOpenCvSharpExtern.so)才能使 OpenCvSharp 正常工作。要使用 OpenCvSharp,你应该在项目中同时添加 OpenCvSharp4
和 OpenCvSharp4.runtime.*
包。目前已发布了 Windows、UWP 和 Ubuntu 的原生绑定。
名为 OpenCvSharp3-* 和 OpenCvSharp-* 的包已被弃用。
OpenCvSharp3-AnyCPU / OpenCvSharp3-WithoutDll / OpenCvSharp-AnyCPU / OpenCvSharp-WithoutDll
Docker 镜像
- Ubuntu
- 适用于 Google App Engine Flexible (.NET Core 3.1):shimat/appengine-aspnetcore3.1-opencv4.5.0
- 适用于 AWS Lambda (.NET 5):shimat/al2-dotnet5-opencv4.5.0
安装
Windows(除 UWP 外)
将 OpenCvSharp4
和 OpenCvSharp4.runtime.win
NuGet 包添加到你的项目中。你也可以使用 OpenCvSharp4.Windows
代替。
UWP
将 OpenCvSharp4
和 OpenCvSharp4.runtime.uwp
NuGet 包添加到你的项目中。注意,OpenCvSharp4.runtime.win
和 OpenCvSharp4.Windows
不适用于 UWP。
Ubuntu 22.04
将 OpenCvSharp4
和 OpenCvSharp4.runtime.ubuntu.22.04.x64
NuGet 包添加到你的项目中。
dotnet new console -n ConsoleApp01
cd ConsoleApp01
dotnet add package OpenCvSharp4
dotnet add package OpenCvSharp4_.runtime.ubuntu.22.04-x64
# -- 编辑 Program.cs --- #
dotnet run
下载
如果你不使用 NuGet,可以从发布页面获取 DLL 文件。
目标 OpenCV 版本
要求
- .NET Framework 4.8 / .NET 6 / .NET Standard 2.0
- (Windows)Visual C++ 2022 可再发行程序包
- (Windows Server)Media Foundation
PS1> Install-WindowsFeature Server-Media-Foundation
- (Ubuntu)你必须预先安装所有构建 OpenCV 所需的依赖包。需要安装许多包(如 libjpeg)才能使 OpenCV 正常工作。 https://www.learnopencv.com/install-opencv-4-on-ubuntu-18-04/
OpenCvSharp 不能在 Unity 和 Xamarin 平台上运行。 对于 Unity,请考虑使用 OpenCV for Unity 或其他解决方案。
OpenCvSharp 不支持 CUDA。 如果你想使用 CUDA 功能,需要自行定制原生绑定。
用法
始终记得释放 Mat 实例!using
语法很有用。
// C# 8
// 使用 Canny 算法进行边缘检测
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))
using (new Window("目标图像", dst))
{
Cv2.WaitKey();
}
}
}
如上所述,类的对象,如Mat和MatExpr,拥有非托管资源,需要通过调用Dispose()方法手动释放。最糟糕的是,+、-、*等运算符每次都会创建新对象,这些对象需要被释放,否则会造成内存泄漏。尽管有using语法,代码看起来仍然非常冗长。
因此,提供了ResourcesTracker类。ResourcesTracker实现了IDisposable接口,当调用Dispose()方法时,ResourcesTracker跟踪的所有资源都会被释放。ResourcesTracker的T()方法可以跟踪一个对象或对象数组,而NewMat()方法类似于T(new Mat(...))。所有需要释放的对象都可以用T()包裹。例如:t.T(255 - t.T(picMat * 0.8))。示例代码如下:
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();
}
特性
- OpenCvSharp尽可能地模仿原生OpenCV C/C++ API风格。
- OpenCvSharp的许多类都实现了IDisposable。无需管理不安全的资源。
- OpenCvSharp不强制使用面向对象的编程风格。你也可以调用原生风格的OpenCV函数。
- OpenCvSharp提供了将
Mat
转换为Bitmap
(GDI+)或WriteableBitmap
(WPF)的函数。
代码示例
https://github.com/shimat/opencvsharp_samples/
API文档
http://shimat.github.io/opencvsharp/api/OpenCvSharp.html
OpenCvSharp构建说明
Windows
- 安装Visual Studio 2022或更高版本
- 需要VC++功能。
- 运行
download_opencv_windows.ps1
从https://github.com/shimat/opencv_files下载OpenCV库和头文件。这些lib文件是由OpenCvSharp的所有者使用GitHub Actions预编译的。
.\download_opencv_windows.ps1
- 构建OpenCvSharp
- 打开
OpenCvSharp.sln
并构建
- 打开
如何自定义OpenCV二进制文件
如果你想使用OpenCvSharp默认不提供的一些OpenCV功能(例如GPU),你需要自己构建OpenCV。Windows版OpenCvSharp的OpenCV二进制文件是在opencv_files仓库中创建的。参见README。
git clone --recursive https://github.com/shimat/opencv_files
- 编辑
build_windows.ps1
或build_uwp.ps1
来自定义CMake参数。 - 运行PowerShell脚本。
Ubuntu
- 构建包含opencv_contrib的OpenCV。
- 安装.NET Core SDK。https://learn.microsoft.com/ja-jp/dotnet/core/install/linux-ubuntu
- 获取OpenCvSharp源文件
git clone https://github.com/shimat/opencvsharp.git
cd opencvsharp
git fetch --all --tags --prune && git checkout ${OPENCVSHARP_VERSION}
- 构建原生包装器
OpenCvSharpExtern
cd opencvsharp/src
mkdir build
cd build
cmake -D CMAKE_INSTALL_PREFIX=${YOUR_OPENCV_INSTALL_PATH} ..
make -j
make install
你应该添加对opencvsharp/src/build/OpenCvSharpExtern/libOpenCvSharpExtern.so
的引用
export LD_LIBRARY_PATH="${LD_LIBRARY_PATH}:/home/shimat/opencvsharp/src/build/OpenCvSharpExtern"
- 向你的项目添加
OpenCvSharp4
NuGet包
dotnet new console -n ConsoleApp01
cd ConsoleApp01
dotnet add package OpenCvSharp4
# -- 编辑 Program.cs --- #
dotnet run
捐赠
如果你觉得OpenCvSharp库有用,并想表示感谢,可以通过以下方式进行捐赠。谢谢。