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); }
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 }
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; }