Files
HawkeyeVision/Hawkeye.VisionBuilder.Workflow/Operations/Basic/SkeletonOperation.cs
2026-03-24 11:57:27 +01:00

40 lines
1.2 KiB
C#

using Hawkeye.VisionBuilder.Workflow.Datatypes;
using Hawkeye.VisionBuilder.Workflow.Operations.Attributes;
using OpenCvSharp;
namespace Hawkeye.VisionBuilder.Workflow.Operations.Basic;
[Category("Basic")]
public class SkeletonOperation:BaseOperation
{
protected override void InterpretInternal(Context context)
{
if (!CheckImageExists(context)) return;
if(!CheckGrayscale(context)) return;
var skeleton = new Mat(context.ActiveImage.ImageData.Size(), MatType.CV_8UC1, Scalar.All(0));
var temp = context.ActiveImage.ImageData.Clone();
var element = Cv2.GetStructuringElement(MorphShapes.Cross, new OpenCvSharp.Size(3, 3));
var image = context.ActiveImage.ImageData.Clone();
do
{
var eroded = image.Erode(element);
temp =eroded.Dilate(element);
Cv2.Subtract(image,temp, temp);
Cv2.BitwiseOr(skeleton, temp, skeleton);
eroded.CopyTo(image);
} while (Cv2.CountNonZero(image) != 0);
context.ActiveImage = new HawkeyeImage()
{
ImageData = skeleton
};
Result = true;
}
}