using Hawkeye.VisionBuilder.Workflow.Datatypes; using Hawkeye.VisionBuilder.Workflow.Operations.Attributes; using OpenCvSharp; namespace Hawkeye.VisionBuilder.Workflow.Operations.Morphology; [Category("Morphology")] public class ClosingOperation:BaseOperation { public ClosingOperation() { CanHaveProcessingError = false; } public int Closing { get; set; } = 1; protected override void InterpretInternal(Context context) { if (!CheckImageExists(context)) return; if (!CheckGrayscale(context)) return; var element = Cv2.GetStructuringElement(MorphShapes.Ellipse, new Size(Closing, Closing)); context.ActiveImage = new HawkeyeImage() { ImageData = context.ActiveImage!.ImageData.MorphologyEx(MorphTypes.Close, element) }; Status = $"Closing {Closing}"; Result = true; } public override void Save(BinaryWriter bw) { base.Save(bw); bw.Write(Closing); } public override void Load(BinaryReader br) { base.Load(br); Closing = br.ReadInt32(); } public override void Save(Dictionary dict) { base.Save(dict); dict[nameof(Closing)] = Closing; } public override void Load(Dictionary dict) { base.Load(dict); if (dict.ContainsKey(nameof(Closing))) Closing = Convert.ToInt32(dict[nameof(Closing)]); } }