Old versions of OpenCvSharp are stored in opencvsharp_2410.
Native binding (OpenCvSharpExtern.dll / libOpenCvSharpExtern.so) is required to work OpenCvSharp. To use OpenCvSharp, you should add both OpenCvSharp4
and OpenCvSharp4.runtime.*
packages to your project. Currently, native bindings for Windows, UWP and Ubuntu are released.
Packages named OpenCvSharp3- and OpenCvSharp- are deprecated.
OpenCvSharp3-AnyCPU / OpenCvSharp3-WithoutDll / OpenCvSharp-AnyCPU / OpenCvSharp-WithoutDll
https://github.com/shimat?tab=packages
Add OpenCvSharp4
and OpenCvSharp4.runtime.win
NuGet packages to your project. You can use OpenCvSharp4.Windows
instead.
Add OpenCvSharp4
and OpenCvSharp4.runtime.uwp
NuGet packages to your project. Note that OpenCvSharp4.runtime.win
and OpenCvSharp4.Windows
don't work for UWP.
Add OpenCvSharp4
and OpenCvSharp4.runtime.ubuntu.22.04.x64
NuGet packages to your project.
dotnet new console -n ConsoleApp01
cd ConsoleApp01
dotnet add package OpenCvSharp4
dotnet add package OpenCvSharp4_.runtime.ubuntu.22.04-x64
# -- edit Program.cs --- #
dotnet run
If you do not use NuGet, get DLL files from the release page.
PS1> Install-WindowsFeature Server-Media-Foundation
OpenCvSharp won't work on Unity and Xamarin platform. For Unity, please consider using OpenCV for Unity or some other solutions.
OpenCvSharp does not support CUDA. If you want to use the CUDA features, you need to customize the native bindings yourself.
For more details, see samples and Wiki pages.
Always remember to release Mat instances! The using
syntax is useful.
// C# 8
// Edge detection by Canny algorithm
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();
}
}
}
As mentioned above, objects of classes, such as Mat and MatExpr, have unmanaged resources and need to be manually released by calling the Dispose() method. Worst of all, the +, -, *, and other operators create new objects each time, and these objects need to be disposed, or there will be memory leaks. Despite having the using syntax, the code still looks very verbose.
Therefore, a ResourcesTracker class is provided. The ResourcesTracker implements the IDisposable interface, and when the Dispose() method is called, all resources tracked by the ResourcesTracker are disposed. The T() method of ResourcesTracker can trace an object or an array of objects, and the method NewMat() is like T(new Mat(...). All the objects that need to be released can be wrapped with T().For example: t.T(255 - t.T(picMat * 0.8)) . Example code is as following:
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();
}
Mat
into Bitmap
(GDI+) or WriteableBitmap
(WPF).https://github.com/shimat/opencvsharp_samples/
http://shimat.github.io/opencvsharp/api/OpenCvSharp.html
download_opencv_windows.ps1
to download OpenCV libs and headers from https://github.com/shimat/opencv_files. Those lib files are precompiled by the owner of OpenCvSharp using GitHub Actions.
.\download_opencv_windows.ps1
OpenCvSharp.sln
and buildIf you want to use some OpenCV features that are not provided by default in OpenCvSharp (e.g. GPU), you will have to build OpenCV yourself. The binary files of OpenCV for OpenCvSharp for Windows are created in the opencv_files repository. See the README.
git clone --recursive https://github.com/shimat/opencv_files
build_windows.ps1
or build_uwp.ps1
to customize the CMake parameters .Build OpenCV with opencv_contrib.
Install .NET Core SDK. https://learn.microsoft.com/ja-jp/dotnet/core/install/linux-ubuntu
Get OpenCvSharp source files
git clone https://github.com/shimat/opencvsharp.git
cd opencvsharp
git fetch --all --tags --prune && git checkout ${OPENCVSHARP_VERSION}
Build native wrapper OpenCvSharpExtern
cd opencvsharp/src
mkdir build
cd build
cmake -D CMAKE_INSTALL_PREFIX=${YOUR_OPENCV_INSTALL_PATH} ..
make -j
make install
You should add reference to opencvsharp/src/build/OpenCvSharpExtern/libOpenCvSharpExtern.so
export LD_LIBRARY_PATH="${LD_LIBRARY_PATH}:/home/shimat/opencvsharp/src/build/OpenCvSharpExtern"
Add OpenCvSharp4
NuGet package to your project
dotnet new console -n ConsoleApp01
cd ConsoleApp01
dotnet add package OpenCvSharp4
# -- edit Program.cs --- #
dotnet run
If you find the OpenCvSharp library useful and would like to show your gratitude by donating, here are some donation options. Thank you.