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