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); }
public OpenCvTest() { InitializeComponent(); _ipcImage = IpcImageFileMapped.LoadFromFile(ImageUris.LargeBitmapBgr); _interopBitmap = _ipcImage.GetInteropBitmap(); ImageWpf.Source = _interopBitmap; }
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(""); } }
public InteropGdi() { InitializeComponent(); _ipcImage = IpcImageFileMapped.LoadFromFile(ImageUris.LargeBitmapBgr); _interopBitmap = _ipcImage.GetInteropBitmap(); ImageWpf.Source = _interopBitmap; DrawGdiImage(null, null); }
public WriteableBitmapTest() { InitializeComponent(); _ipcImage = IpcImageFileMapped.LoadFromFile(ImageUris.LargeBitmapBgr); _writeableBitmap = _ipcImage.GetWriteableBitmap(); _graphics = _ipcImage.GetGdiGraphics(); Draw(null, null); TestImage.Source = _writeableBitmap; }
public static Bitmap GetDrawingBitmap(this IpcImage ipcImage) { if (ExtUtil.GetOrCreateMember(out var bitmap, ipcImage, DrawingBitmapDictionary, CreateDrawingBitmap)) { return(bitmap); } ipcImage.OnDispose += () => bitmap.Dispose(); return(bitmap); }
public static InteropBitmap GetInteropBitmap(this IpcImage ipcImage) { if (ExtUtil.GetOrCreateMember(out var bitmap, ipcImage, InteropBitmapDictionary, CreateInteropBitmap)) { return(bitmap); } ipcImage.OnUpdate += () => bitmap.Invalidate(); return(bitmap); }
// 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); }
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); }
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); }
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)); }
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); }
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); }
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); }
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(""); } }
public static Bitmap CreateDrawingBitmap(IpcImage ipcImage) { return(new Bitmap(ipcImage.Width, ipcImage.Height, ipcImage.Stride, ipcImage.IpcPixelFormat.ToDrawingPixelFormat(), ipcImage.DataPtr)); }