Verwenden Sie das VintaSoft Imaging .NET SDK mit Die Emgu CV (Open CV) Bibliothek

Blogkategorie: Bildgebung.NET

25.02.2022

VintaSoft Imaging .NET SDK bietet Funktionen zur Bildbearbeitung. Das SDK ermöglicht das Erstellen, Laden, Verarbeiten, Drucken und Speichern von Bildern.

Das SDK bietet mehr als 110 Befehle für die Bildverarbeitung, die Folgendes ermöglichen:

Das SDK verwendet die Klasse Vintasoft.Imaging.VintasoftImage zur Bildverarbeitung. Die Methode OpenPixelManipulator ermöglicht das Sperren und den Zugriff auf Bilddaten mithilfe der Klasse Vintasoft.Imaging.PixelManipulator. Die Eigenschaft Vintasoft.Imaging.PixelManipulator.Scan0 ermöglicht es, den Zeiger auf den Anfang der Bilddaten im nicht verwalteten Speicher zu erhalten. Der Zeiger auf den Anfang der Bilddaten im nicht verwalteten Speicher kann von jeder anderen .NET-Bibliothek verwendet werden, die mit im nicht verwalteten Speicher gespeicherten Bildern arbeiten kann. Beispielsweise kann ein im SDK erstelltes Bild mit der Emgu CV-Bibliothek verarbeitet werden - einem plattformübergreifenden .NET-Wrapper für die OpenCV-Bildverarbeitungsbibliothek.

Hier ist C#-Code, der demonstriert, wie man mit dem VintaSoft Imaging .NET SDK ein Bild erstellt (ein Vintasoft.Imaging.VintasoftImage-Objekt erstellt), das Bild mit der OpenCV-Bibliothek verarbeitet und das verarbeitete Bild mit dem VintaSoft Imaging .NET SDK als TIFF-Datei speichert:
/// <summary>
/// Loads image from PNG file using VintaSoft Imaging .NET SDK,
/// inverts loaded image using Emgu CV (Open CV) library,
/// saves inverted image to a new PNG file using VintaSoft Imaging .NET SDK.
/// </summary>
static public void InvertVintasoftImageUsingEmguCV()
{
    // create VintasoftImage from PNG file
    using (Vintasoft.Imaging.VintasoftImage vintasoftImage = new Vintasoft.Imaging.VintasoftImage("source.png"))
    {
        // open pixel manipulator
        Vintasoft.Imaging.PixelManipulator pixelManipulator = vintasoftImage.OpenPixelManipulator();

        // create rectangle that defines region of interest on image
        System.Drawing.Rectangle imageROI = new System.Drawing.Rectangle(0, 0, vintasoftImage.Width, vintasoftImage.Height);
        // lock pixels of image
        pixelManipulator.LockPixels(imageROI, Vintasoft.Imaging.BitmapLockMode.ReadWrite);

        // create Emgu CV image from pointer to unmanaged memory
        using (Emgu.CV.Image emguCvImage =
            new Emgu.CV.Image(
                vintasoftImage.Width,
                vintasoftImage.Height,
                pixelManipulator.Stride,
                pixelManipulator.Scan0))
        {
            // invert image using Open CV and get new result image
            using (Emgu.CV.Image emguCvImage2 = emguCvImage.Not())
            {
                // copy inverted image back to the source image
                // (copy image data from unmanaged memory of emguCvImage2 object to unmanaged data of vintasoftImage/emguCvImage object)
                emguCvImage2.CopyTo(emguCvImage);
            }
        }

        // close pixel manipulator and specify that image data is changed
        vintasoftImage.ClosePixelManipulator(true);

        // save inverted image to new PNG file
        vintasoftImage.Save("result.png");
    }
}