# OpenCvSharp **Repository Path**: AITechInfo/OpenCvSharp ## Basic Information - **Project Name**: OpenCvSharp - **Description**: OpenCV wrapper for .NET - **Primary Language**: C# - **License**: Apache-2.0 - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 1 - **Created**: 2024-12-13 - **Last Updated**: 2026-07-23 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README ![opencvsharp](https://socialify.git.ci/shimat/opencvsharp/image?description=1&forks=1&language=1&owner=1&pattern=Plus&stargazers=1&theme=Light) [![GitHub Actions Windows Status](https://github.com/shimat/opencvsharp/actions/workflows/windows.yml/badge.svg)](https://github.com/shimat/opencvsharp/actions/workflows/windows.yml) [![GitHub Actions Docker Test Status](https://github.com/shimat/opencvsharp/actions/workflows/docker-test-ubuntu.yml/badge.svg)](https://github.com/shimat/opencvsharp/actions/workflows/docker-test-ubuntu.yml) [![GitHub Actions manylinux Status](https://github.com/shimat/opencvsharp/actions/workflows/manylinux.yml/badge.svg)](https://github.com/shimat/opencvsharp/actions/workflows/manylinux.yml) [![GitHub Actions Wasm Status](https://github.com/shimat/opencvsharp/actions/workflows/wasm.yml/badge.svg)](https://github.com/shimat/opencvsharp/actions/workflows/wasm.yml) [![GitHub Actions macOS Status](https://github.com/shimat/opencvsharp/actions/workflows/macos.yml/badge.svg)](https://github.com/shimat/opencvsharp/actions/workflows/macos.yml) [![GitHub license](https://img.shields.io/github/license/shimat/opencvsharp.svg)](https://github.com/shimat/opencvsharp/blob/master/LICENSE) OpenCvSharp is a cross-platform .NET wrapper for OpenCV, providing a rich set of image processing and computer vision functionality. ## 🚀 [Try the Live Demo](https://shimat.github.io/opencvsharp_blazor_sample/) Run OpenCvSharp image processing right in your browser — Blazor WebAssembly, no install needed. ## Which version should I use? OpenCvSharp is published in two parallel package families: | Family | OpenCV | .NET targets | Status | |---|---|---|---| | **OpenCvSharp5** | 5.0.x | .NET 8+ | Active development — recommended for new projects | | **OpenCvSharp4** | 4.13.0 | .NET Framework 4.6.1+, .NET Standard 2.0/2.1, .NET 8+ | Maintenance — for .NET Framework or older runtimes | Both families share the same package layout: every `OpenCvSharp5.*` package has an `OpenCvSharp4.*` counterpart. The examples below use **OpenCvSharp5**; replace `5` with `4` for the OpenCvSharp4 family. > 🔄 **Already using OpenCvSharp4?** See the **[Migration Guide (4 → 5)](docs/migration-4-to-5.md)** for target framework changes, package/namespace renames, and OpenCV 5 API changes. ## Quick Start ### Windows (x64) ```bash dotnet add package OpenCvSharp5.Windows ``` ### Windows (ARM64 — Snapdragon X and other arm64 devices) ```bash dotnet add package OpenCvSharp5 dotnet add package OpenCvSharp5.runtime.win-arm64 ``` ### Linux / Ubuntu ```bash dotnet add package OpenCvSharp5 dotnet add package OpenCvSharp5.official.runtime.linux-x64 # optional headless profile (full module set, no GTK3/X11 dependency) # dotnet add package OpenCvSharp5.official.runtime.linux-x64.headless # optional slim profile (smaller native dependency surface) # dotnet add package OpenCvSharp5.official.runtime.linux-x64.slim ``` ### macOS ```bash dotnet add package OpenCvSharp5 # Intel (x64): dotnet add package OpenCvSharp5.runtime.osx.x64 # Apple Silicon (arm64): dotnet add package OpenCvSharp5.runtime.osx.arm64 ``` For more installation options, see the [Installation](#installation) section below. ## Features * OpenCvSharp is modeled on the native OpenCV C/C++ API style as much as possible. * Many classes of OpenCvSharp implement IDisposable. Unsafe resources are managed automatically. * 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` to `Bitmap` (GDI+) or `WriteableBitmap` (WPF). ## Target OpenCV * **OpenCvSharp5**: [OpenCV 5.0.x](https://opencv.org/) with [opencv_contrib](https://github.com/opencv/opencv_contrib) * **OpenCvSharp4**: [OpenCV 4.13.0](https://opencv.org/) with [opencv_contrib](https://github.com/opencv/opencv_contrib) ## Requirements * **OpenCvSharp5**: [.NET 8](https://www.microsoft.com/net/download) or later * **OpenCvSharp4**: .NET 8+, .NET Standard 2.0 / 2.1, or .NET Framework 4.6.1+ (WpfExtensions also directly targets .NET Framework 4.8) * (Windows Server) Media Foundation ``` PS1> Install-WindowsFeature Server-Media-Foundation ``` * (Linux) The official `OpenCvSharp5.official.runtime.linux-x64` package is built on manylinux_2_28 and works on Ubuntu 20.04+, Debian 10+, RHEL/AlmaLinux 8+, and other Linux distributions with glibc 2.28+. The full package includes FFmpeg (LGPL v2.1) and Tesseract statically linked. * The **full** package uses GTK3 for `highgui` support (`Cv2.ImShow`, `Cv2.WaitKey`, etc.). GTK3 is pre-installed on standard Ubuntu/Debian/RHEL environments. In minimal or container environments where it is absent, install it manually (`apt-get install libgtk-3-0` or `dnf install gtk3`), or use the **headless** or **slim** profile instead. * The **headless** package (`OpenCvSharp5.official.runtime.linux-x64.headless`) keeps the full module set (`videoio`, `dnn`, `ml`, `contrib`, `stitching`, `barcode`, ...) but disables `highgui`, so it has no GTK3/X11 dependency — suitable for containerized services that need more than the slim module set below. * The **slim** package (`OpenCvSharp5.official.runtime.linux-x64.slim`) disables `highgui` and reduces the module set — also has no GUI dependencies. **OpenCvSharp won't work on Unity and Xamarin platforms.** For Unity, please consider using [OpenCV for Unity](https://assetstore.unity.com/packages/tools/integration/opencv-for-unity-21088) or some other solutions. **OpenCvSharp does not support CUDA.** If you want to use CUDA features, you need to customize the native bindings yourself. ## Installation ### Windows x64 Add `OpenCvSharp5` and `OpenCvSharp5.runtime.win` NuGet packages to your project. Alternatively, you can use the `OpenCvSharp5.Windows` all-in-one package. For a smaller feature profile, pair `OpenCvSharp5` with `OpenCvSharp5.runtime.win.slim`, or use the all-in-one `OpenCvSharp5.Windows.Slim` package. ### Windows ARM64 (Snapdragon X Elite and other arm64 devices) Add `OpenCvSharp5` and `OpenCvSharp5.runtime.win-arm64` NuGet packages to your project. For a smaller feature profile, use `OpenCvSharp5.runtime.win-arm64.slim` instead. > **Note:** FFmpeg-based video I/O is not available in the ARM64 packages because no ARM64 Windows prebuilt is provided by the upstream OpenCV project. All other OpenCV modules are included in the full package. ### Linux (Ubuntu and other distributions) Add `OpenCvSharp5` and `OpenCvSharp5.official.runtime.linux-x64` NuGet packages to your project. This package uses the portable `linux-x64` RID and works with .NET 8+ publish/deploy workflows out of the box. ```bash dotnet new console -n ConsoleApp01 cd ConsoleApp01 dotnet add package OpenCvSharp5 dotnet add package OpenCvSharp5.official.runtime.linux-x64 # or headless profile (full module set, no GTK3/X11 dependency): # dotnet add package OpenCvSharp5.official.runtime.linux-x64.headless # or slim profile: # dotnet add package OpenCvSharp5.official.runtime.linux-x64.slim # -- edit Program.cs --- # dotnet run ``` ### macOS (Intel and Apple Silicon) Add `OpenCvSharp5` and the runtime package matching your architecture: ```bash dotnet new console -n ConsoleApp01 cd ConsoleApp01 dotnet add package OpenCvSharp5 # Intel (x64): dotnet add package OpenCvSharp5.runtime.osx.x64 # Apple Silicon (arm64): dotnet add package OpenCvSharp5.runtime.osx.arm64 # --- edit Program.cs --- dotnet run ``` > **Note:** The macOS packages include FFmpeg, Tesseract, Freetype, and all standard OpenCV modules, statically linked. ### Headless profile (Linux only) `OpenCvSharp5.official.runtime.linux-x64.headless` keeps the same module set as the full Linux package (`videoio`, `dnn`, `ml`, `contrib`, `stitching`, `barcode`, ...); only `highgui` is disabled, so the package has no GTK3/X11 dependency. Use it instead of the full package for containerized/headless services that need more than the slim module set below (e.g. `VideoCapture`) but never call `highgui`. ### Slim profile module coverage The `slim` runtime packages keep a practical subset while reducing runtime dependencies. - Enabled modules: `core`, `imgproc`, `imgcodecs`, `calib3d`, `features2d`, `flann`, `objdetect`, `photo`, `ml`, `video`, `stitching`, `barcode` - Disabled modules: `contrib`, `dnn`, `videoio`, `highgui` This profile is used by: - `OpenCvSharp5.runtime.win.slim` - `OpenCvSharp5.Windows.Slim` - `OpenCvSharp5.official.runtime.linux-x64.slim` ## Usage For more details, refer to the **[samples](https://github.com/shimat/opencvsharp_samples/)** and **[Wiki](https://github.com/shimat/opencvsharp/wiki)** pages. **Always remember to release Mat and other IDisposable resources using the `using` syntax:** ```C# // Edge detection by Canny algorithm using OpenCvSharp; 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(); } ```
Note: chained Mat arithmetic is leak-free `Mat` arithmetic operators (`+`, `-`, `*`, `/`, the comparison and bitwise operators, `T()`, `Inv()`, `Mul()`, `Abs()`, `Eye`/`Zeros`/`Ones`, ...) return a purely managed, lazily-evaluated expression tree (`MatExpr`) that holds **no** unmanaged resources. The native `cv::MatExpr` chain is built only when the expression is materialized — when it is assigned to a `Mat`, or passed where a `Mat`/`InputArray` is expected — and every native intermediate is disposed immediately during that evaluation. As a result, chained expressions never leak: you only need `using` on your inputs and on the final `Mat`. The intermediate expression nodes require no disposal. ```C# using var src = new Mat("lenna.png", ImreadModes.Grayscale); // The intermediate (src * 0.8) holds no native resource; nothing leaks. using Mat dst = 255 - src * 0.8; ``` ```C# using var mat1 = new Mat(new Size(100, 100), MatType.CV_8UC3, new Scalar(0)); using Mat mat3 = 255 - mat1 * 0.8; using var canny = new Mat(); Cv2.Canny(src, canny, 50, 200); // an expression can be passed directly to a Cv2 method ```
## Code samples https://github.com/shimat/opencvsharp_samples/ Interactive browser-based samples (Blazor WebAssembly) are maintained separately at https://github.com/shimat/opencvsharp_blazor_sample/, with a [live demo](https://shimat.github.io/opencvsharp_blazor_sample/). ## API Documents http://shimat.github.io/opencvsharp/api/OpenCvSharp.html ## NuGet > Packages are published in two parallel families: **`OpenCvSharp5.*`** (OpenCV 5.x, .NET 8+) and **`OpenCvSharp4.*`** (OpenCV 4.13.0; also supports .NET Framework / .NET Standard). The tables below list the OpenCvSharp5 packages — each has an identically-named `OpenCvSharp4.*` counterpart. ### Managed libraries | Package | Description | |---------|-------------| |**[OpenCvSharp5](https://www.nuget.org/packages/OpenCvSharp5/)**| OpenCvSharp core libraries | |**[OpenCvSharp5.GdipExtensions](https://www.nuget.org/packages/OpenCvSharp5.GdipExtensions/)**| GDI+ (System.Drawing) Extensions | |**[OpenCvSharp5.WpfExtensions](https://www.nuget.org/packages/OpenCvSharp5.WpfExtensions/)**| WPF Extensions | |**[OpenCvSharp5.AvaloniaExtensions](https://www.nuget.org/packages/OpenCvSharp5.AvaloniaExtensions/)**| Avalonia Extensions (cross-platform) | |**[OpenCvSharp5.Windows](https://www.nuget.org/packages/OpenCvSharp5.Windows/)**| All-in-one package for Windows | |**[OpenCvSharp5.Windows.Slim](https://www.nuget.org/packages/OpenCvSharp5.Windows.Slim/)**| All-in-one slim package for Windows |

Native bindings

| Package | Description | |---------|-------------| |**[OpenCvSharp5.runtime.win](https://www.nuget.org/packages/OpenCvSharp5.runtime.win/)**| Native bindings for Windows x64 | |**[OpenCvSharp5.runtime.win.slim](https://www.nuget.org/packages/OpenCvSharp5.runtime.win.slim/)**| Slim native bindings for Windows x64, with `core,imgproc,imgcodecs,calib3d,features2d,flann,objdetect,photo,ml,video,barcode` enabled | |**[OpenCvSharp5.runtime.win-arm64](https://www.nuget.org/packages/OpenCvSharp5.runtime.win-arm64/)**| Native bindings for Windows ARM64 (Snapdragon X and other arm64 devices). FFmpeg not included. | |**[OpenCvSharp5.runtime.win-arm64.slim](https://www.nuget.org/packages/OpenCvSharp5.runtime.win-arm64.slim/)**| Slim native bindings for Windows ARM64, with `core,imgproc,imgcodecs,calib3d,features2d,flann,objdetect,photo,ml,video,barcode` enabled | |**[OpenCvSharp5.official.runtime.linux-x64](https://www.nuget.org/packages/OpenCvSharp5.official.runtime.linux-x64/)**| Native bindings for Linux x64 (portable RID, recommended). Built on manylinux_2_28. Includes FFmpeg and Tesseract statically linked. Requires GTK3 runtime (`libgtk-3.so.0`) for highgui (`Cv2.ImShow` etc.). | |**[OpenCvSharp5.official.runtime.linux-x64.headless](https://www.nuget.org/packages/OpenCvSharp5.official.runtime.linux-x64.headless/)**| Headless native bindings for Linux x64 (portable RID). Same module set as the full package, but `highgui` is disabled, so it has no GTK3/X11 dependency. | |**[OpenCvSharp5.official.runtime.linux-x64.slim](https://www.nuget.org/packages/OpenCvSharp5.official.runtime.linux-x64.slim/)**| Slim native bindings for Linux x64 (portable RID), with `core,imgproc,imgcodecs,calib3d,features2d,flann,objdetect,photo,ml,video,barcode` enabled. No external runtime dependencies. | |**[OpenCvSharp5.runtime.linux-arm64](https://www.nuget.org/packages/OpenCvSharp5.runtime.linux-arm64/)**| Native bindings for Linux ARM64 (AArch64) | |**[OpenCvSharp5.runtime.wasm](https://www.nuget.org/packages/OpenCvSharp5.runtime.wasm/)**| Native bindings for WebAssembly | |**[OpenCvSharp5.runtime.osx.x64](https://www.nuget.org/packages/OpenCvSharp5.runtime.osx.x64/)**| Native bindings for macOS Intel (x64). Includes FFmpeg, Tesseract, HDF, and Freetype. | |**[OpenCvSharp5.runtime.osx.arm64](https://www.nuget.org/packages/OpenCvSharp5.runtime.osx.arm64/)**| Native bindings for macOS Apple Silicon (arm64). Includes FFmpeg, Tesseract, HDF, and Freetype. | > **Note:** Windows x86 (32-bit) support has been dropped as of the OpenCV 4.13.0 release series. > The `OpenCvSharp5.runtime.win` and `OpenCvSharp5.runtime.win.slim` packages now ship **x64-only** native binaries. > Users requiring x86 Windows support should stay on the last OpenCV 4.12.x-based packages.
Native binding (OpenCvSharpExtern.dll / libOpenCvSharpExtern.so / libOpenCvSharpExtern.dylib) is required for OpenCvSharp to work. To use OpenCvSharp, you should add both `OpenCvSharp5` and `OpenCvSharp5.runtime.*` packages to your project. Currently, native bindings for Windows x64/ARM64, Linux x64/ARM64, macOS x64/arm64, and WebAssembly are available. ## Docker images https://github.com/shimat?tab=packages ## OpenCvSharp Build Instructions If you want to build OpenCV and OpenCvSharp from source (Windows or Ubuntu), or customize a build for an embedded (ARM) platform, see **[Build Instructions](docs/build-instructions.md)**. ## Donations If you find the OpenCvSharp library useful and would like to show your gratitude by donating, here are some donation options. Thank you. https://github.com/sponsors/shimat