This commit is contained in:
meelstorm
2025-10-15 13:13:47 +02:00
parent 97ac18eac6
commit dec036dbcf
16 changed files with 534 additions and 678 deletions

View File

@@ -54,12 +54,17 @@ namespace CandyboxPlugin.Recipe
}
}
public void LearnContours(OpenCvSharp.Point[][] contours, Mat image, List<VectorLine> cuts)
public void LearnContours(OpenCvSharp.Point[][] contours, Mat image, List<VectorLine> cuts, bool relearn)
{
lock (_lockObject)
{
_learnedParameters = relearn ? new LearningParameters() : _learnedParameters;
// Convert cuts to be relative to blister center
_learnedParameters.Cuts = cuts;
if (_learnedParameters.CandyParameters.Count == 0)//initial learning
{
_learnedParameters.BlisterAngle = _blisterAngle;
@@ -131,6 +136,8 @@ namespace CandyboxPlugin.Recipe
return clone;
}
public Point BlisterCenter => _blisterCenter;
public ProcessingResult ProcessImage(Mat image)
{
lock (_lockObject)
@@ -166,7 +173,7 @@ namespace CandyboxPlugin.Recipe
resBlister.Dispose();
resBlister = blisterOpened;
Cv2.WaitKey(1);
sw1.Stop();
Console.WriteLine("AI Time:" + sw1.ElapsedMilliseconds);
@@ -207,44 +214,6 @@ namespace CandyboxPlugin.Recipe
))
.ToList());
//var dbg=triangles.Where(x => x.IsInside(points[15])).ToList();
//var dbgEdges = Voronoi.Voronoi.GenerateEdgesFromDelaunay(dbg);
//foreach (var triangle in dbg)
//{
// Cv2.Line(
// numbersOverlay,
// new OpenCvSharp.Point(triangle.Vertices[0].X, triangle.Vertices[0].Y),
// new OpenCvSharp.Point(triangle.Vertices[1].X, triangle.Vertices[1].Y),
// new Scalar(255, 255, 0, 255), // Aqua color in BGR
// 1 // Thickness
// );
// Cv2.Line(
// numbersOverlay,
// new OpenCvSharp.Point(triangle.Vertices[1].X, triangle.Vertices[1].Y),
// new OpenCvSharp.Point(triangle.Vertices[2].X, triangle.Vertices[2].Y),
// new Scalar(255, 255, 0, 255), // Aqua color in BGR
// 1 // Thickness
// );
// Cv2.Line(
// numbersOverlay,
// new OpenCvSharp.Point(triangle.Vertices[2].X, triangle.Vertices[2].Y),
// new OpenCvSharp.Point(triangle.Vertices[0].X, triangle.Vertices[0].Y),
// new Scalar(255, 255, 0, 255), // Aqua color in BGR
// 1 // Thickness
// );
//}
//foreach (Edge edge in dbgEdges)
//{
// Cv2.Line(
// numbersOverlay,
// new OpenCvSharp.Point(edge.Point1.X, edge.Point1.Y),
// new OpenCvSharp.Point(edge.Point2.X, edge.Point2.Y),
// new Scalar(255, 255, 255, 255),
// 3 // Thickness
// );
//}
var edges = Voronoi.Voronoi.GenerateEdgesFromDelaunay(triangles);
foreach (Edge edge in edges)
@@ -258,31 +227,22 @@ namespace CandyboxPlugin.Recipe
);
}
//foreach (Edge edge in edges)
//{
// Cv2.Line(
// numbersOverlay,
// new OpenCvSharp.Point(edge.Point1.X, edge.Point1.Y),
// new OpenCvSharp.Point(edge.Point2.X, edge.Point2.Y),
// new Scalar(255, 255, 255, 255),
// 3 // Thickness
// );
//}
}
foreach (VectorLine cut in _learnedParameters.Cuts)
{
Cv2.Line(res, new OpenCvSharp.Point(cut.StartPoint.X, cut.StartPoint.Y),
new OpenCvSharp.Point(cut.EndPoint.X, cut.EndPoint.Y), new Scalar(0, 0, 0), 3);
// Convert from relative to absolute coordinates
var absoluteStart = new OpenCvSharp.Point(
cut.StartPoint.X + _blisterCenter.X,
cut.StartPoint.Y + _blisterCenter.Y
);
var absoluteEnd = new OpenCvSharp.Point(
cut.EndPoint.X + _blisterCenter.X,
cut.EndPoint.Y + _blisterCenter.Y
);
Cv2.Line(res, absoluteStart, absoluteEnd, new Scalar(0, 0, 0), 3);
}
//foreach (VectorLine cut in _learnedParameters.Cuts)
//{
// Cv2.Line(numbersOverlay, new OpenCvSharp.Point(cut.StartPoint.X, cut.StartPoint.Y),
// new OpenCvSharp.Point(cut.EndPoint.X, cut.EndPoint.Y), new Scalar(255, 0, 255,255), 3);
//}
var mat = res;
Cv2.Threshold(mat, mat, 128, 255, ThresholdTypes.Binary);