예제 #1
0
        public static void AForgeImToImage()
        {
            var            bmp = new Bitmap(640, 480, System.Drawing.Imaging.PixelFormat.Format24bppRgb);
            UnmanagedImage uIm = UnmanagedImage.FromManagedImage(bmp);

            var img = uIm.AsImage();

            Console.WriteLine("UnmanagedImage to Image<,> automatically: Bitmap pixel format {0} is transformed into: {1}.", uIm.PixelFormat, img.ColorInfo);

            var img2 = uIm.ToImage <Bgr, byte>();

            Console.WriteLine("UnmanagedImage to Image<,> forced: Bitmap pixel format {0} is transformed into: {1}.", uIm.PixelFormat, img.ColorInfo);
        }
예제 #2
0
        static void Main(string[] args)
        {
            var img = new Bgr <byte> [480, 640];

            //***********************************************************************************************************************************************************************
            Console.ForegroundColor = ConsoleColor.Red; Console.WriteLine("********* TColor[,] <=> Image<> conversions (built-in) ****************"); Console.ResetColor();
            //to Image<>
            Image <Bgr <byte> > lockedImg = img.Lock();
            //from Image<>
            var arr = lockedImg.Clone();

            //***********************************************************************************************************************************************************************
            Console.WriteLine();
            Console.ForegroundColor = ConsoleColor.Red; Console.WriteLine("********* Image<,> <=> OpenCV conversions (built-in) ****************"); Console.ResetColor();
            //to IplImage
            IplImage iplImage;

            using (var uImg = img.Lock())
            {
                iplImage = uImg.AsOpenCvImage(); //data is shared
            }
            //from IplImage
            var imgFromIpl = iplImage.AsImage();

            //***********************************************************************************************************************************************************************
            Console.WriteLine();
            Console.ForegroundColor = ConsoleColor.Red; Console.WriteLine("*********** Image<,> <=> Bitmap conversions (BitmapInterop) ****************"); Console.ResetColor();
            //to Bitmap
            var bmp = img.ToBitmap();
            //from Bitmap
            var imgFromBmp = bmp.ToArray();

            //***********************************************************************************************************************************************************************
            Console.WriteLine();
            Console.ForegroundColor = ConsoleColor.Red; Console.WriteLine("****** TColor[,] <=> AForge UnmanagedImage conversions  (AForgeInterop) *******"); Console.ResetColor();
            //to AForge image
            using (var uImg = img.Lock())
            {
                UnmanagedImage uIm = uImg.AsAForgeImage(); //data is shared
            }

            //from AForge image
            UnmanagedImage aforgeIm      = UnmanagedImage.Create(640, 480, System.Drawing.Imaging.PixelFormat.Format32bppArgb);
            var            imgFromAForge = aforgeIm.AsImage(); //TODO: extensions directly to array
        }
예제 #3
0
        unsafe static void Main()
        {
            Test test = new Test();

            test.TestRunningWeightedVariance();
            return;

            var resourceDir = Path.Combine(Directory.GetParent(Directory.GetCurrentDirectory()).FullName, "Resources");
            var imgColor    = Bitmap.FromFile(Path.Combine(resourceDir, "testColorBig.jpg")).ToImage <Bgr, byte>();

            imgColor = imgColor.CorrectContrast(105);

            /*var bmp1 = (System.Drawing.Bitmap)System.Drawing.Bitmap.FromFile("nature-spring.jpg");
             * var image1 = bmp1.ToImage<Gray, float>();
             *
             * var res1 = ResizeNearsetNeighbur.Resize(image1, new Size(640, 480));
             * ImageBox.Show("Interpolated image", res1.ToBitmap());
             *
             * var res = new Image<Bgr, float>(320, 200);
             * image1.GetRectSubPix(new PointF(1.9f, 1.9f), res);
             * ImageBox.Show("Interpolated image", res.ToBitmap());*/

            test.TestLKFlow();


            return; //uncomment if you want execute functions below

            var            bmp   = (System.Drawing.Bitmap)System.Drawing.Bitmap.FromFile("nature-spring.jpg");
            var            image = bmp.ToImage <Bgr, byte>();
            UnmanagedImage uIm   = UnmanagedImage.FromManagedImage(bmp);

            /********************** Bitmap <-> Image<,> *************************/
            //from Bitmap...
            IImage            bmpImg1 = bmp.ToImage();                                                     //generic image (dest format depends on bmp pixel format) (this case: <Color3, byte>)
            Image <Bgr, byte> bmpImg2 = bmp.ToImage <Bgr, byte>();                                         //in this case additional cast is performed (<Color3, byte> => <Bgr, byte>) (no data convert)
            //to Bitmap...
            Bitmap bmpFromImg = bmpImg2.ToBitmap(copyAlways: false /*do not copy if you do not have to*/); //<Bgr, byte> can be casted to <Color3, byte> therefore data is shared between Bitmap and bmPimg2

            /********************** UnmanagedImage <-> Image<,> *************************/
            //from UnmanagedImage...
            var im1FromUIm = uIm.AsImage();             //generic image (dest format depends on bmp pixel format)
            var im2FromUIm = uIm.ToImage <Bgr, byte>(); //in this case additional cast is performed (<Color3, byte> => <Bgr, byte>) (no data convert)
            //to UnmanagedImage...
            var uIm2 = im1FromUIm.ToAForgeImage(copyAlways: false, failIfCannotCast: false);

            /******************* some AForge filter recreation... ***********************/

            /********************** Array <-> Image<,> (also eliminates need for Matrix, UnmanagedImage converters) ********************************/
            int[,] arr = new int[480, 640];

            //from Array...
            var image1FromArray      = arr.ToImage(); //supported for all 2D/3D arrays
            var castedImageFromArray = arr.AsImage(); //supported only on 2D arrays (data is shared)

            //to Array ...
            var arrFromIm = image1FromArray.ToArray(); //output is 2D or 3D array (see function overloads)


            /**************** channel rotate *******************/
            //Image<,> => flexible
            var channels = image.SplitChannels();
            var dest     = new Image <Bgr, byte>(new Image <Gray, byte>[] { channels[1], channels[0], channels[2] });

            //AForge
            AForge.Imaging.Filters.RotateChannels rc = new AForge.Imaging.Filters.RotateChannels();
            rc.Apply(uIm);

            /**************** channel extract *******************/
            //Image<,> => simple
            var ch = image[0];

            //AForge
            AForge.Imaging.Filters.ExtractChannel ec = new AForge.Imaging.Filters.ExtractChannel(0);
            ec.Apply(uIm);

            /**************** Max (see Min also) *******************/
            //Image<,>
            image.Max(image, inPlace: true);

            //AForge
            AForge.Imaging.Filters.Merge m = new AForge.Imaging.Filters.Merge(uIm);
            m.Apply(uIm);

            /**************** Sobel *******************/
            var bmpSquareGray = (System.Drawing.Bitmap)System.Drawing.Bitmap.FromFile("square.bmp");
            var grayIm        = bmpSquareGray.ToImage <Gray, float>(); //currently there are no overloads for magnitude for <byte>, will be fixed later

            //Image<,> => flexible
            var sobelX = grayIm.Sobel(1, 0, 3);
            var sobelY = grayIm.Sobel(0, 1, 3);
            var mag    = sobelX.Magnitude(sobelY); //should use Threshold for values > 255 (not implemented yet)

            //mag.ToBitmap().Save("bla.bmp");  //img.Save(..) is available for <IColor3, byte> and <Gray, byte> (Bitmap compatible formats) should change ?
            //var mag = sobelX.Abs().Add(sobelY.Abs()).Scale(0, 255).Convert<Gray, byte>(); //should work later (it is not implemented)

            //AForge
            AForge.Imaging.Filters.SobelEdgeDetector sobel = new AForge.Imaging.Filters.SobelEdgeDetector();
            var destSobel = sobel.Apply(grayIm.ToAForgeImage());

            //destSobel.ToManagedImage().Save("sobelAForge.bmp");
            return;
        }