• Stars
    star
    5,327
  • Rank 7,751 (Top 0.2 %)
  • Language
    C#
  • License
    Apache License 2.0
  • Created almost 11 years ago
  • Updated 3 months ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

OpenCV wrapper for .NET

opencvsharp

Github Actions Windows Status Github Actions Ubuntu Status GitHub license

Old versions of OpenCvSharp are stored in opencvsharp_2410.

NuGet

Managed libraries

Package Description Link
OpenCvSharp4 OpenCvSharp core libraries NuGet version
OpenCvSharp4.Extensions GDI+ Extensions NuGet version
OpenCvSharp4.WpfExtensions WPF Extensions NuGet version
OpenCvSharp4.Windows All-in-one package for Windows (except UWP) NuGet version

Native bindings

Package Description Link
OpenCvSharp4.runtime.win Native bindings for Windows x64/x86 (except UWP) NuGet version
OpenCvSharp4.runtime.uwp Native bindings for UWP (Universal Windows Platform) x64/x86/ARM NuGet version
OpenCvSharp4_.runtime.ubuntu.20.04-x64 Native bindings for Ubuntu 20.04 x64 NuGet version
OpenCvSharp4.runtime.linux-arm Native bindings for Linux Arm NuGet version
OpenCvSharp4.runtime.wasm Native bindings for WebAssembly NuGet version

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

Docker images

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 20.04

Add OpenCvSharp4 and OpenCvSharp4.runtime.ubuntu.20.04.x64 NuGet packages to your project.

dotnet new console -n ConsoleApp01
cd ConsoleApp01
dotnet add package OpenCvSharp4
dotnet add package OpenCvSharp4.runtime.ubuntu.20.04-x64
# -- edit Program.cs --- # 
dotnet run

Downloads

If you do not use NuGet, get DLL files from the release page.

Target OpenCV

Requirements

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.

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 into Bitmap(GDI+) or WriteableBitmap(WPF).

Code samples

https://github.com/shimat/opencvsharp_samples/

API Documents

http://shimat.github.io/opencvsharp/api/OpenCvSharp.html

OpenCvSharp Build Instructions

Windows

  • Install Visual Studio 2022 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 GitHub Actions.
.\download_opencv_windows.ps1
  • Build OpenCvSharp
    • Open OpenCvSharp.sln and build

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 or build_uwp.ps1 to customize the CMake parameters .
  • Run the PowerShell script.

Ubuntu

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

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

More Repositories

1

opencvsharp_samples

C#
413
star
2

opencvsharp_2410

.NET Framework wrapper for OpenCV 2.4.10
C#
32
star
3

opencvsharp5

Experimental OpenCV5 wrapper for .NET
C#
22
star
4

videoinputsharp

.NET wrapper to the videoInput library
C++
20
star
5

opencv_files

Build OpenCV
PowerShell
18
star
6

opencvsharp_blazor_sample

OpenCvSharp + Blazor WebAssembly Code Samples
HTML
12
star
7

mpo2jpg

MPO to JPEG converter
C#
8
star
8

opencvsharp_docs

HTML
4
star
9

opencv_files_420

OpenCV 4.2.0 libs and include files (VC++ v142 x86/x64)
C++
3
star
10

opencvsharp_AWSLambdaSample

Code sample of OpenCvSharp on AWS Lambda
C#
3
star
11

PerspectiveTransformation

Keystone correction code snippet using perspective transformation
C#
3
star
12

OpenCvSharp_WebAppSample

ASP.NET Core Web Application with OpenCvSharp
C#
2
star
13

nursery_sapporo

Python
2
star
14

AppEngineDotnet5Sample

Google App Engine Flex + ASP.NET Core 5 (.NET 5)
C#
2
star
15

first_drogon

CMake
2
star
16

opencv_files_320

C++
2
star
17

appengine_fastapi_sample

AppEngine(Standard Environment) + Python3.8 + FastAPI
Python
2
star
18

place_name_to_location

Python
2
star
19

dlibsharp

.NET Framework wrapper for Dlib
2
star
20

municipality_shape

A study that displays and analyzes the geometry of local governments obtained from GeoJSON using Streamlit/OpenCV.
Python
2
star
21

aspnetcore_WebApiApplication1

ASP.NET Core WebAPI template
C#
1
star
22

streamlit_with_opencv_sample

Streamlit + OpenCV sample
Python
1
star
23

dotnet_docker_sample

C#
1
star
24

net6_webapi_test_sample

How to use WebApplicationFactory in test (ASP.NET Core 6)
C#
1
star
25

CommunityToolkitSamples

C#
1
star
26

real_estate_price

Streamlit study for visualizing real-estate transaction
Python
1
star
27

ngspicer

Ruby wrapper for ngspice
C
1
star
28

gha_dynamic_matrix_trial

1
star
29

linq_python_examples

Python
1
star
30

reusable_workflow_sample

1
star
31

source_generator_sample

C#
1
star
32

deer_appearance

Python
1
star
33

python-lib-subdir-sample

Python
1
star
34

road_angle

Python
1
star
35

github_pages_sample

1
star
36

dotfiles

Shell
1
star
37

dotnet_actions_test

.NET GitHub Actions sandbox
C#
1
star
38

opencv_dependency

Rust code snippet to create a dependency graph of OpenCV modules as DOT (Graphviz)
Rust
1
star
39

bus_lines

Python
1
star
40

dotnet_coverage_sample

GitHub Actions for dotnet project coverage
C#
1
star
41

pyocr_test

Python
1
star
42

kanto_it_flu

Streamlitによる、東振協インフルエンザ予防接種 会場リスト
Python
1
star
43

station_voronoi

Python
1
star
44

fastapi_di_sample

FastAPI + Dependency Injector code samples
Python
1
star
45

AspNetCoreParameterTest

C#
1
star