Օգտագործեք VintaSoft Imaging .NET SDK-ն Emgu CV (Open CV) գրադարանի հետ

Բլոգի կատեգորիա՝ Պատկերացում.NET

25.02.2022

VintaSoft Imaging .NET SDK-ն ապահովում է պատկերների հետ աշխատելու ֆունկցիոնալություն: SDK-ն թույլ է տալիս ստեղծել, բեռնել, մշակել, տպել և պահպանել պատկերներ:

SDK-ն առաջարկում է պատկերի մշակման ավելի քան 110 հրաման, որոնք թույլ են տալիս՝

SDK-ն օգտագործում է Vintasoft.Imaging.VintasoftImage դասը՝ պատկերի հետ աշխատելու համար։ Vintasoft.Imaging.VintasoftImage.OpenPixelManipulator մեթոդը թույլ է տալիս կողպել պատկերի տվյալները և մուտք գործել պատկերի տվյալներ՝ օգտագործելով Vintasoft.Imaging.PixelManipulator դասը։ Vintasoft.Imaging.PixelManipulator.Scan0 հատկությունը թույլ է տալիս ստանալ ցուցիչ դեպի պատկերի տվյալների սկիզբը չկառավարվող հիշողության մեջ: Չկառավարվող հիշողության մեջ պատկերի տվյալների սկզբի ցուցիչը կարող է օգտագործվել ցանկացած այլ .NET գրադարանի կողմից, որը կարող է աշխատել չկառավարվող հիշողության մեջ պահված պատկերների հետ: Օրինակ, SDK-ում ստեղծված պատկերը կարող է մշակվել Emgu CV գրադարանի միջոցով, որը Open CV պատկերի մշակման գրադարանի համար նախատեսված խաչաձև հարթակային .NET փաթաթան է:

Ահա C# կոդը, որը ցույց է տալիս, թե ինչպես ստեղծել պատկեր՝ օգտագործելով VintaSoft Imaging .NET SDK-ն (ստեղծել Vintasoft.Imaging.VintasoftImage օբյեկտ), մշակել պատկերը Open CV գրադարանով և պահպանել մշակված պատկերը TIFF ֆայլում՝ օգտագործելով VintaSoft Imaging .NET SDK-ն։
/// <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");
    }
}