コード例 #1
0
        public static Mat GetOpenCv(this IpcImage ipcImage)
        {
            if (ipcImage is IpcImageMat imageMat)
            {
                return(imageMat.GetMat());
            }
            if (MatList.ContainsKey(ipcImage))
            {
                return(MatList[ipcImage]);
            }

            var format = ipcImage.IpcPixelFormat.GetOpenCvMatType();

            var mat = new Mat(
                ipcImage.Height,
                ipcImage.Width,
                ipcImage.IpcPixelFormat.GetOpenCvMatType(),
                ipcImage.DataPtr);

            //if (IpcImageMat.IsCvGpuEnabled) mat = new GpuMat(mat); //TODO: Test how GpuMat interacts with memory

            MatList.Add(ipcImage, mat);

            return(mat);
        }
コード例 #2
0
 public OpenCvTest()
 {
     InitializeComponent();
     _ipcImage       = IpcImageFileMapped.LoadFromFile(ImageUris.LargeBitmapBgr);
     _interopBitmap  = _ipcImage.GetInteropBitmap();
     ImageWpf.Source = _interopBitmap;
 }
コード例 #3
0
ファイル: UnitTest1.cs プロジェクト: gsonnenf/Gstc.Imaging
        public void TestMatImageOperation()
        {
            var image = IpcImage.LoadFromFile(ImageUris.Bgr32);
            var mat   = image.GetOpenCv();

            //In place operations may not work for convolutions as the row/column data changes with each pass
            var temp = mat.GaussianBlur(new Size(3, 3), 4, 4, BorderTypes.Replicate);

            temp.CopyTo(mat);

            for (int rowIndex = 0; rowIndex < mat.Height; rowIndex++)
            {
                for (int columnIndex = 0; columnIndex < mat.Width; columnIndex++)
                {
                    var value = mat.Get <uint>(rowIndex, columnIndex);
                    Console.Write(value.ToString("x") + " ");

                    if (rowIndex == 0)
                    {
                        Assert.AreEqual(0xfd535353, value);
                    }
                    if (rowIndex == 1)
                    {
                        Assert.AreEqual(0xfd565656, value);
                    }
                    if (rowIndex == 4)
                    {
                        Assert.AreEqual(0xfda7a7d2, value);
                    }
                }
                Console.WriteLine("");
            }
        }
コード例 #4
0
 public InteropGdi()
 {
     InitializeComponent();
     _ipcImage       = IpcImageFileMapped.LoadFromFile(ImageUris.LargeBitmapBgr);
     _interopBitmap  = _ipcImage.GetInteropBitmap();
     ImageWpf.Source = _interopBitmap;
     DrawGdiImage(null, null);
 }
コード例 #5
0
 public WriteableBitmapTest()
 {
     InitializeComponent();
     _ipcImage        = IpcImageFileMapped.LoadFromFile(ImageUris.LargeBitmapBgr);
     _writeableBitmap = _ipcImage.GetWriteableBitmap();
     _graphics        = _ipcImage.GetGdiGraphics();
     Draw(null, null);
     TestImage.Source = _writeableBitmap;
 }
コード例 #6
0
 public static Bitmap GetDrawingBitmap(this IpcImage ipcImage)
 {
     if (ExtUtil.GetOrCreateMember(out var bitmap, ipcImage, DrawingBitmapDictionary, CreateDrawingBitmap))
     {
         return(bitmap);
     }
     ipcImage.OnDispose += () => bitmap.Dispose();
     return(bitmap);
 }
コード例 #7
0
 public static InteropBitmap GetInteropBitmap(this IpcImage ipcImage)
 {
     if (ExtUtil.GetOrCreateMember(out var bitmap, ipcImage, InteropBitmapDictionary, CreateInteropBitmap))
     {
         return(bitmap);
     }
     ipcImage.OnUpdate += () => bitmap.Invalidate();
     return(bitmap);
 }
コード例 #8
0
 // Associates a member with an IpcImage using a dictionary. A poorman's Extension Property.
 public static bool GetOrCreateMember <T>(out T element, IpcImage ipcImage, Dictionary <IpcImage, T> dictionary, Func <IpcImage, T> createMethod)
 {
     if (dictionary.TryGetValue(ipcImage, out element))
     {
         return(true);
     }
     element = createMethod(ipcImage);
     dictionary[ipcImage] = element;
     ipcImage.OnDispose  += () => dictionary.Remove(ipcImage);
     return(false);
 }
コード例 #9
0
        public static InteropBitmap CreateInteropBitmap(IpcImage ipcImage)
        {
            var bitmapSource = System.Windows.Interop.Imaging.CreateBitmapSourceFromMemorySection(
                ipcImage.MapPtr,
                ipcImage.Width,
                ipcImage.Height,
                ipcImage.IpcPixelFormat.ToMediaPixelFormat(),
                ipcImage.Stride,
                0);

            return((InteropBitmap)bitmapSource);
        }
コード例 #10
0
        public static WriteableBitmap CreateWriteableBitmap(IpcImage ipcImage)
        {
            var writeableBitmap = new WriteableBitmap(ipcImage.Width, ipcImage.Height, 96.0, 96.0, ipcImage.IpcPixelFormat.ToMediaPixelFormat(), null);

            writeableBitmap.WritePixels(
                new Int32Rect(0, 0, ipcImage.Width, ipcImage.Height),
                ipcImage.DataPtr,
                ipcImage.BufferSize,
                ipcImage.Stride);

            return(writeableBitmap);
        }
コード例 #11
0
        public static Graphics CreateGdiGraphics(this IpcImage ipcImage, Bitmap bitmap)
        {
            var bitmapInfo = new NativeMethods.BITMAPINFO {
                biWidth       = ipcImage.Width,
                biHeight      = ipcImage.Height,
                biBitCount    = (short)ipcImage.BitsPerPixel,
                biPlanes      = 1,
                biCompression = ipcImage.IpcPixelFormat.ToGdiBiFormat()
            };

            bitmapInfo.biSize = Marshal.SizeOf(bitmapInfo);
            return(Graphics.FromImage(bitmap));
        }
コード例 #12
0
        private void ProcessImage(IpcImage ipcImage)
        {
            var mat = ipcImage.GetOpenCv();

            mat.MinMaxLoc(out double min, out double max);



            //Console.WriteLine("1-ipc:" + _ipcImage.GetPixelValue(0,10));
            //Cv2.Divide(mat, -1, mat);
            Console.WriteLine("Pixel:" + mat.Get <Single>(0, 10));
            Cv2.Subtract(mat, -1 * min, mat);
            Cv2.Log(mat, mat);
            Cv2.Normalize(mat, mat);
        }
コード例 #13
0
        public static Graphics GetGdiGraphics(this IpcImage ipcImage)
        {
            var dictionary = GdiGraphicsDictionary;

            if (dictionary.TryGetValue(ipcImage, out var graphics))
            {
                return(graphics);
            }
            graphics             = CreateGdiGraphics(ipcImage, GetDrawingBitmap(ipcImage));
            dictionary[ipcImage] = graphics;

            ipcImage.OnDispose += () => {
                dictionary.Remove(ipcImage);
                graphics.Dispose();
            };
            return(graphics);
        }
コード例 #14
0
        public static WriteableBitmap GetWriteableBitmap(this IpcImage ipcImage)
        {
            if (ExtUtil.GetOrCreateMember(out var bitmap, ipcImage, WritableBitmapDictionary, CreateWriteableBitmap))
            {
                return(bitmap);
            }

            ipcImage.OnUpdate += () => {
                var rect = new Int32Rect(0, 0, ipcImage.Width, ipcImage.Height);
                bitmap.WritePixels(rect, ipcImage.DataPtr, ipcImage.BufferSize, ipcImage.Stride);
                bitmap.Lock();
                bitmap.AddDirtyRect(rect);
                bitmap.Unlock();
            };

            return(bitmap);
        }
コード例 #15
0
ファイル: UnitTest1.cs プロジェクト: gsonnenf/Gstc.Imaging
        public void TestMatImageLoad()
        {
            var image = IpcImage.LoadFromFile(ImageUris.Bgr32);
            var mat   = image.GetOpenCv();

            Assert.AreEqual(image.Width, mat.Cols, "Width mismatch.");
            Assert.AreEqual(image.Height, mat.Height, "Height mismatch.");

            for (int rowIndex = 0; rowIndex < mat.Height; rowIndex++)
            {
                for (int columnIndex = 0; columnIndex < mat.Width; columnIndex++)
                {
                    var value = mat.Get <uint>(rowIndex, columnIndex);
                    Console.Write(value.ToString("x") + " ");

                    if (rowIndex == 0)
                    {
                        Assert.AreEqual(0xff000000, value);
                    }
                    if (rowIndex == 1)
                    {
                        Assert.AreEqual(0xffffffff, value);
                    }
                    if (rowIndex == 4)
                    {
                        Assert.AreEqual(0xff01017f, value);
                    }
                    if (rowIndex == 6)
                    {
                        Assert.AreEqual(0xff017f01, value);
                    }
                    if (rowIndex == 8)
                    {
                        Assert.AreEqual(0xff7f0101, value);
                    }
                }
                Console.WriteLine("");
            }
        }
コード例 #16
0
 public static Bitmap CreateDrawingBitmap(IpcImage ipcImage)
 {
     return(new Bitmap(ipcImage.Width, ipcImage.Height, ipcImage.Stride, ipcImage.IpcPixelFormat.ToDrawingPixelFormat(), ipcImage.DataPtr));
 }