OpenCvSharp alternatives and similar packages
Based on the "Image Processing" category.
Alternatively, view OpenCvSharp alternatives based on common mentions on social networks and blogs.
-
ImageProcessor
DISCONTINUED. :camera: A fluent wrapper around System.Drawing for the processing of image files. -
SimpleITK
SimpleITK: a layer built on top of the Insight Toolkit (ITK), intended to simplify and facilitate ITK's use in rapid prototyping, education and interpreted languages. -
MetadataExtractor
Extracts Exif, IPTC, XMP, ICC and other metadata from image, video and audio files -
PixelViewer
A cross-platform image viewer which supports reading raw Luminance/YUV/RGB/ARGB/Bayer pixels data from file and rendering it. -
ImageWizard
Image processing webservice based on ASP.NET Core and ImageSharp / SkiaSharp / SvgNet / DocNET -
ImageUltimate
ImageUltimate is an ASP.NET Image resizer and a .NET Image Processor which supports ASP.NET Core 5.0+, ASP.NET Core 2.1+, ASP.NET MVC 3.0+ and ASP.NET WebForms 4.7.2+ web applications/web sites. -
TeximpNet
A cross-platform .NET Standard library for reading/manipulating/writing image files. The primary focus is to create 2D/3D/Cubemap textures for graphics/game applications, notably to convert images to GPU compressed formats and generate mipmaps. The library wraps the FreeImage native library to import/export over 30 common image formats, and wraps the Nvidia Texture Tools native library for GPU compression features. It also has a fully featured DDS format importer/exporter written in C#.
InfluxDB high-performance time series database

* Code Quality Rankings and insights are calculated and provided by Lumnify.
They vary from L1 to L5 with "L5" being the highest.
Do you think we are missing an alternative of OpenCvSharp or a related project?
README
Old versions of OpenCvSharp are stored in opencvsharp_2410.
NuGet
Managed libraries
Native bindings
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, Ubuntu 18.04 and macOS are released.
Packages named OpenCvSharp3-* and OpenCvSharp-* are deprecated.
OpenCvSharp3-AnyCPU / OpenCvSharp3-WithoutDll / OpenCvSharp-AnyCPU / OpenCvSharp-WithoutDll
Docker images
https://hub.docker.com/u/shimat
- Ubuntu 18.04 (.NET Core 3.1): shimat/ubuntu18-dotnetcore3.1-opencv4.5.0
- For Google App Engine Flexible (.NET Core 3.1): shimat/appengine-aspnetcore3.1-opencv4.5.0
- For AWS Lambda (.NET 5): shimat/al2-dotnet5-opencv4.5.0
Installation
Windows (except UWP)
Add OpenCvSharp4
and OpenCvSharp4.runtime.win
NuGet packages to your project. You can use OpenCvSharp4.Windows
instead.
UWP
Add OpenCvSharp4
and OpenCvSharp4.runtime.uwp
NuGet packages to your project. Note that OpenCvSharp4.runtime.win
and OpenCvSharp4.Windows
don't work for UWP.
Ubuntu 18.04
Add OpenCvSharp4
and OpenCvSharp4.runtime.ubuntu.18.04.x64
NuGet packages to your project.
dotnet new console -n ConsoleApp01
cd ConsoleApp01
dotnet add package OpenCvSharp4
dotnet add package OpenCvSharp4.runtime.ubuntu.18.04-x64
# -- edit Program.cs --- #
dotnet run
Google AppEngine Flexible (Ubuntu 16.04)
Some Docker images are provided to use OpenCvSharp with AppEngine Flexible. The native binding (libOpenCvSharpExtern) is already built in the docker image and you don't need to worry about it.
FROM shimat/appengine-aspnetcore3.1-opencv4.5.0:20201030
ADD ./ /app
ENV ASPNETCORE_URLS=http://*:${PORT}
WORKDIR /app
ENTRYPOINT [ "dotnet", "YourAspNetCoreProject.dll" ]
Ubuntu 18.04 Docker image
You can use the shimat/ubuntu18-dotnetcore3.1-opencv4.5.0
docker image.
This issue may be helpful: https://github.com/shimat/opencvsharp/issues/920
Downloads
If you do not use NuGet, get DLL files from the release page.
Target OpenCV
Requirements
- .NET Framework 4.6.1 / .NET Core 2.0 / Mono
- (Windows) Visual C++ 2019 Redistributable Package
- (Windows Server) Media Foundation
PS1> Install-WindowsFeature Server-Media-Foundation
- (Ubuntu, Mac) You must pre-install all the dependency packages needed to build OpenCV. Many packages such as libjpeg must be installed in order to work OpenCV. https://www.learnopencv.com/install-opencv-4-on-ubuntu-18-04/
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.
Usage
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();
}
Features
- OpenCvSharp is modeled on the native OpenCV C/C++ API style as much as possible.
- Many classes of OpenCvSharp implement IDisposable. There is no need to manage unsafe resources.
- OpenCvSharp does not force object-oriented programming style on you. You can also call native-style OpenCV functions.
- OpenCvSharp provides functions for converting from
Mat
intoBitmap
(GDI+) orWriteableBitmap
(WPF).
Code samples
https://github.com/shimat/opencvsharp_samples/
Documents
http://shimat.github.io/opencvsharp/api/OpenCvSharp.html
OpenCvSharp Build Instructions
Windows
- Install Visual Studio 2019 or later
- VC++ features are required.
- Run
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 AppVeyor CI..\download_opencv_windows.ps1
- Build OpenCvSharp
- Open
OpenCvSharp.sln
and build
- Open
How to customize OpenCV binaries yourself
If 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
- Edit
build_windows.ps1
orbuild_uwp.ps1
to customize the CMake parameters . - Run the PowerShell script.
Ubuntu 18.04
- Build OpenCV with opencv_contrib.
- Install .NET Core SDK. https://docs.microsoft.com/ja-jp/dotnet/core/install/linux-package-manager-ubuntu-1804
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 projectdotnet new console -n ConsoleApp01 cd ConsoleApp01 dotnet add package OpenCvSharp4 # -- edit Program.cs --- # dotnet run
Older Ubuntu
Refer to the Dockerfile and Wiki pages.
Donations
If you find the OpenCvSharp library useful and would like to show your gratitude by donating, here are some donation options. Thank you.
*Note that all licence references and agreements mentioned in the OpenCvSharp README section above
are relevant to that project's source code only.