public async Task <Mat[]> ProjectPatternsAndCaptureAsync() { var originalPixelFormat = episcan.Sensor.PixelFormat; episcan.Sensor.PixelFormat = MySensor.PixelFormatList.Mono8; var frames = new List <Mat>(); for (int i = 0; i < structuredLight.PatternImages.Length; i++) { var pattern = structuredLight.PatternImages[i]; episcan.Screen.BackgroundImage = pattern; //Application.DoEvents(); await Task.Delay(100); if (episcan.Sensor == null) { throw new NullReferenceException(); } var frame = await episcan.CaptureAverage(4); frames.Add(frame); Cv2.ImWrite($"temp_{i}.png", frame); //ImageFileUtil.Png.SaveGray8($"temp_{i}.png", Roi[2], Roi[3], arr); } episcan.Sensor.PixelFormat = originalPixelFormat; return(frames.ToArray()); }
public async Task Run(MyEpiscan episcan) { if (YMin < 0) { YMin = 0; } if (YMax < 0) { YMax = episcan.Screen.Size.Height; } // generate patterns var projSize = new Size(episcan.Screen.Size.Width, episcan.Screen.Size.Height); var projNum = (YMax - YMin) / Shift; var patterns = new List <Mat>(); for (int i = Math.Max(YMin, 0); i < Math.Min(YMax - Width, YMax - 1); i += Shift) { var pattern = new Mat(projSize, MatType.CV_8UC1); pattern.RowRange(i, i + Width).SetTo(255); patterns.Add(pattern); } // Switch to synchronized mode episcan.Sensor.ShutterMode = MySensor.ShutterModeList.Rolling; // capture and save for (int i = 0; i < patterns.Length; i++) { var pattern = patterns[i]; episcan.Screen.BackgroundMat = pattern; await Task.Delay(100); var captured = await episcan.CaptureAverage(AverageNum); var filename = $"line_{i:D4}.png"; Cv2.ImWrite(filename, captured); } }
public async Task Run(MyEpiscan episcan) { // generate patterns var projSize = new Size(episcan.Screen.Size.Width, episcan.Screen.Size.Height); var pattern = new Mat(projSize, MatType.CV_8UC1); pattern.ColRange(projSize.Width / 2 - 50, projSize.Width / 2 + 50).SetTo(255); episcan.Screen.BackgroundMat = pattern; await Task.Delay(100); // Switch to synchronized mode episcan.Sensor.ShutterMode = MySensor.ShutterModeList.Rolling; for (int delay = DelayMin, i = 0; delay < DelayMax; delay += Shift, i++) { episcan.SetDelayExposure(delay, Exposure); await Task.Delay(1); var captured = await episcan.CaptureAverage(AverageNum); var filename = $"capture_{i:D5}_{(int)delay:D5}.png"; Cv2.ImWrite(filename, captured); } }