private Task DoUndistortImage(object o) { return(Task.Factory.StartNew(async() => { System.Windows.Forms.OpenFileDialog openFileDialog = null; System.Windows.Forms.SaveFileDialog saveFileDialog = null; bool open = false; bool save = false; CameraViewModel cvm = null; Parent.SyncContext.Send(c => { cvm = Parent.CameraViewModel; openFileDialog = new System.Windows.Forms.OpenFileDialog(); openFileDialog.Filter = "Image (*.png) | *.png"; open = openFileDialog.ShowDialog() == System.Windows.Forms.DialogResult.OK; saveFileDialog = new System.Windows.Forms.SaveFileDialog(); saveFileDialog.Filter = "Image (*.png) | *.png"; save = saveFileDialog.ShowDialog() == System.Windows.Forms.DialogResult.OK; }, null); if (open && save) { MetroDialogSettings settings = new MetroDialogSettings() { AnimateShow = false, AnimateHide = false }; var controller = await Parent.DialogCoordinator.ShowProgressAsync(Parent, "Please wait...", "Export undistort image!", settings: Parent.MetroDialogSettings); controller.SetCancelable(false); Mat rawImage = CvInvoke.Imread(openFileDialog.FileName, Emgu.CV.CvEnum.ImreadModes.Grayscale); Mat rawImageUndist = new Mat(); Mat map1 = new Mat(); Mat map2 = new Mat(); Fisheye.InitUndistorRectifyMap(cvm.OrginalCameraMatrix, cvm.DistortionCoefficients, Mat.Eye(3, 3, DepthType.Cv64F, 1), cvm.CenteredCameraMatrix, new System.Drawing.Size(512, 512), DepthType.Cv32F, map1, map2); CvInvoke.Remap(rawImage, rawImageUndist, map1, map2, Inter.Linear, BorderType.Constant); CvInvoke.Imwrite(saveFileDialog.FileName, rawImageUndist); await controller.CloseAsync(); } })); }
public MainViewModel() { _IOProxy = new IOProxy(_SettingContainer); _SyncContext = SynchronizationContext.Current; CameraViewModel = new CameraViewModel(this); SettingViewModel = new SettingViewModel(this); DataPlotViewModel = new DataPlotViewModel(this); CalibrationViewModel = new CalibrationViewModel(this); RecordViewModel = new RecordViewModel(this); ReplayViewModel = new ReplayViewModel(this); DebugViewModel = new DebugViewModel(this); VisualisationViewModel = new VisualisationViewModel(this); _DialogCoordinator = MahApps.Metro.Controls.Dialogs.DialogCoordinator.Instance; }
private static void OnPropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) { CameraViewModel cvm = (d as CameraViewModel); bool changed = false; switch (e.Property.Name) { case "Enabled": changed = cvm.Parent.SettingContainer.Settings.StreamingSettings.CameraRawStreamEnabled != cvm.Enabled; cvm.Parent.SettingContainer.Settings.StreamingSettings.CameraRawStreamEnabled = cvm.Enabled; try { if (cvm.Enabled) { cvm.Parent.IOProxy.Subscribe(cvm, ProxyEventType.CameraEvent); } else { cvm.Parent.IOProxy.Unsubscribe(cvm, ProxyEventType.CameraEvent); } } catch (Exception) { } break; case "ExposureTimeSetting": cvm.Parent.IOProxy.SetExposure(cvm.ExposureTimeSetting); break; case "FOVScale": changed = cvm.Parent.SettingContainer.Settings.CalibrationSettings.IntrinsicCalibrationSettings.FOVScale != cvm.FOVScale; cvm.Parent.SettingContainer.Settings.CalibrationSettings.IntrinsicCalibrationSettings.FOVScale = cvm.FOVScale; break; default: break; } if (changed) { cvm.Parent.UpdateSettings(false); } }
private Task DoExportVideo(object o) { return(Task.Factory.StartNew(async() => { ReplayFile file = o as ReplayFile; RawDataReader reader = null; string fullPath = null; bool isRemote = false; System.Windows.Forms.OpenFileDialog openFileDialog = null; System.Windows.Forms.SaveFileDialog saveFileDialog = null; bool open = false; bool save = false; CameraViewModel cvm = null; Parent.SyncContext.Send(c => { cvm = Parent.CameraViewModel; fullPath = file.FullPath; isRemote = file.IsRemote; openFileDialog = new System.Windows.Forms.OpenFileDialog(); openFileDialog.Filter = "Matlab (*.mat) | *.mat"; open = openFileDialog.ShowDialog() == System.Windows.Forms.DialogResult.OK; saveFileDialog = new System.Windows.Forms.SaveFileDialog(); saveFileDialog.Filter = "Video (*.mp4) | *.mp4"; save = saveFileDialog.ShowDialog() == System.Windows.Forms.DialogResult.OK; }, null); if (open && save && !isRemote) { MetroDialogSettings settings = new MetroDialogSettings() { AnimateShow = false, AnimateHide = false }; var controller = await Parent.DialogCoordinator.ShowProgressAsync(Parent, "Please wait...", "Export video file!", settings: Parent.MetroDialogSettings); controller.SetCancelable(false); reader = new RawDataReader(fullPath, RawReaderMode.Imu0 | RawReaderMode.Camera0, null, false); controller.SetIndeterminate(); reader.Open(); VIMatlabImporter matlabImporter = new VIMatlabImporter(openFileDialog.FileName); matlabImporter.Open(); VIVideoRenderer renderer = new VIVideoRenderer(saveFileDialog.FileName, 1920, 1080, Parent.SyncContext, cvm.OrginalCameraMatrix, cvm.CenteredCameraMatrix, cvm.DistortionCoefficients); renderer.Open(); renderer.Render(matlabImporter, reader, delegate(double percent) { controller.SetProgress(percent); }); renderer.Close(); matlabImporter.Close(); reader.Close(); await controller.CloseAsync(); } })); }