40 lines
1.2 KiB
C#
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, 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;
|
|
}
|
|
} |