Dodaj pliki projektów.
This commit is contained in:
parent
0a5bd4d55b
commit
7f28de2ce3
8
Domain/Abstractions/ILayer.cs
Normal file
8
Domain/Abstractions/ILayer.cs
Normal file
@ -0,0 +1,8 @@
|
||||
namespace Domain.Abstractions;
|
||||
|
||||
public interface ILayer
|
||||
{
|
||||
public uint Order { get; }
|
||||
public OpticalSchema OpticalSchema { get; }
|
||||
public Task Execute();
|
||||
}
|
||||
9
Domain/Domain.csproj
Normal file
9
Domain/Domain.csproj
Normal file
@ -0,0 +1,9 @@
|
||||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
|
||||
<PropertyGroup>
|
||||
<TargetFramework>net7.0</TargetFramework>
|
||||
<ImplicitUsings>enable</ImplicitUsings>
|
||||
<Nullable>enable</Nullable>
|
||||
</PropertyGroup>
|
||||
|
||||
</Project>
|
||||
17
Domain/OpticalSchema.cs
Normal file
17
Domain/OpticalSchema.cs
Normal file
@ -0,0 +1,17 @@
|
||||
namespace Domain;
|
||||
|
||||
public enum OpticalSchema
|
||||
{
|
||||
/// <summary>
|
||||
/// SP 0
|
||||
/// </summary>
|
||||
Sp0,
|
||||
/// <summary>
|
||||
/// SP 0.1
|
||||
/// </summary>
|
||||
Sp01,
|
||||
/// <summary>
|
||||
/// SP 1.1
|
||||
/// </summary>
|
||||
Sp11,
|
||||
}
|
||||
31
Make3.Renderer.sln
Normal file
31
Make3.Renderer.sln
Normal file
@ -0,0 +1,31 @@
|
||||
|
||||
Microsoft Visual Studio Solution File, Format Version 12.00
|
||||
# Visual Studio Version 17
|
||||
VisualStudioVersion = 17.7.34031.279
|
||||
MinimumVisualStudioVersion = 10.0.40219.1
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Make3.Renderer", "Make3.Renderer\Make3.Renderer.csproj", "{570EF7F2-630F-44A5-8CB9-247F34B6FC18}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Domain", "Domain\Domain.csproj", "{5D88EEB2-A075-4531-890E-DC38E2700325}"
|
||||
EndProject
|
||||
Global
|
||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||
Debug|Any CPU = Debug|Any CPU
|
||||
Release|Any CPU = Release|Any CPU
|
||||
EndGlobalSection
|
||||
GlobalSection(ProjectConfigurationPlatforms) = postSolution
|
||||
{570EF7F2-630F-44A5-8CB9-247F34B6FC18}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{570EF7F2-630F-44A5-8CB9-247F34B6FC18}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{570EF7F2-630F-44A5-8CB9-247F34B6FC18}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{570EF7F2-630F-44A5-8CB9-247F34B6FC18}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{5D88EEB2-A075-4531-890E-DC38E2700325}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{5D88EEB2-A075-4531-890E-DC38E2700325}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{5D88EEB2-A075-4531-890E-DC38E2700325}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{5D88EEB2-A075-4531-890E-DC38E2700325}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
EndGlobalSection
|
||||
GlobalSection(SolutionProperties) = preSolution
|
||||
HideSolutionNode = FALSE
|
||||
EndGlobalSection
|
||||
GlobalSection(ExtensibilityGlobals) = postSolution
|
||||
SolutionGuid = {2158B183-2CF0-407A-A5BC-8CF3BBD87FEB}
|
||||
EndGlobalSection
|
||||
EndGlobal
|
||||
26
Make3.Renderer/Layers/LayerBase.cs
Normal file
26
Make3.Renderer/Layers/LayerBase.cs
Normal file
@ -0,0 +1,26 @@
|
||||
using Domain;
|
||||
using Domain.Abstractions;
|
||||
|
||||
namespace Make3.Renderer.Layers;
|
||||
|
||||
internal abstract class LayerBase : ILayer
|
||||
{
|
||||
public uint Order { get; private set; }
|
||||
|
||||
public abstract OpticalSchema OpticalSchema { get; }
|
||||
|
||||
protected LayerBase(uint order)
|
||||
{
|
||||
Order = order;
|
||||
}
|
||||
|
||||
public async Task Execute()
|
||||
{
|
||||
await Render();
|
||||
}
|
||||
|
||||
protected virtual Task Render()
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
}
|
||||
45
Make3.Renderer/Layers/TrekoLayers/Treko.cs
Normal file
45
Make3.Renderer/Layers/TrekoLayers/Treko.cs
Normal file
@ -0,0 +1,45 @@
|
||||
using Domain;
|
||||
|
||||
namespace Make3.Renderer.Layers.TrekoLayers
|
||||
{
|
||||
internal class Treko : LayerBase
|
||||
{
|
||||
public override OpticalSchema OpticalSchema => OpticalSchema.Sp0;
|
||||
|
||||
|
||||
internal Treko(uint order) : base(order) { }
|
||||
|
||||
protected override Task Render()
|
||||
{
|
||||
var a = Step3(Step2(Step1()));
|
||||
|
||||
|
||||
|
||||
|
||||
//return base.Render();
|
||||
return Task.CompletedTask;
|
||||
}
|
||||
|
||||
protected string Step1()
|
||||
{
|
||||
Step1_1();
|
||||
return "";
|
||||
}
|
||||
|
||||
protected string Step1_1()
|
||||
{
|
||||
return "";
|
||||
}
|
||||
|
||||
private string Step2(string inputValue)
|
||||
{
|
||||
return "nothing";
|
||||
}
|
||||
|
||||
private int Step3(string inputValue)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
17
Make3.Renderer/Layers/TrekoLayers/Treko3d.cs
Normal file
17
Make3.Renderer/Layers/TrekoLayers/Treko3d.cs
Normal file
@ -0,0 +1,17 @@
|
||||
using Domain;
|
||||
|
||||
namespace Make3.Renderer.Layers.TrekoLayers
|
||||
{
|
||||
internal class Treko3d : LayerBase
|
||||
{
|
||||
public override OpticalSchema OpticalSchema => OpticalSchema.Sp0;
|
||||
|
||||
internal Treko3d(uint order) : base(order) { }
|
||||
|
||||
protected override Task Render()
|
||||
{
|
||||
|
||||
return base.Render();
|
||||
}
|
||||
}
|
||||
}
|
||||
19
Make3.Renderer/Make3.Renderer.csproj
Normal file
19
Make3.Renderer/Make3.Renderer.csproj
Normal file
@ -0,0 +1,19 @@
|
||||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
|
||||
<PropertyGroup>
|
||||
<OutputType>Exe</OutputType>
|
||||
<TargetFramework>net7.0</TargetFramework>
|
||||
<ImplicitUsings>enable</ImplicitUsings>
|
||||
<Nullable>enable</Nullable>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="OpenCvSharp4" Version="4.8.0.20230708" />
|
||||
<PackageReference Include="OpenCvSharp4.runtime.win" Version="4.8.0.20230708" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="..\Domain\Domain.csproj" />
|
||||
</ItemGroup>
|
||||
|
||||
</Project>
|
||||
44
Make3.Renderer/Program.cs
Normal file
44
Make3.Renderer/Program.cs
Normal file
@ -0,0 +1,44 @@
|
||||
// See https://aka.ms/new-console-template for more information
|
||||
using Domain.Abstractions;
|
||||
using Make3.Renderer;
|
||||
using Make3.Renderer.Layers.TrekoLayers;
|
||||
using OpenCvSharp;
|
||||
|
||||
Console.WriteLine("Hello, World!");
|
||||
|
||||
var filePath = @"F:\GS_TEST.png";
|
||||
filePath = @"F:\GS_TEST_1.png";
|
||||
|
||||
using (var s = new FileStream(filePath, FileMode.Open, FileAccess.Read))
|
||||
{
|
||||
var testClass = new TestClass(s);
|
||||
testClass.Execute();
|
||||
}
|
||||
Console.ReadLine();
|
||||
//входные данные
|
||||
var projectLayers = new List<ILayer>
|
||||
{
|
||||
new Treko(0),
|
||||
new Treko(1),
|
||||
new Treko(2),
|
||||
};
|
||||
|
||||
|
||||
//программа
|
||||
projectLayers.Sort((a, b) => a.Order.CompareTo(b.Order));
|
||||
|
||||
for (int i = 0; i < projectLayers.Count; i++)
|
||||
{
|
||||
await projectLayers[i].Execute();
|
||||
}
|
||||
|
||||
//List<ushort> ImageColors(Mat image)
|
||||
//{
|
||||
|
||||
//}
|
||||
|
||||
class ShapeInfo
|
||||
{
|
||||
public Point[][] Points { get; set; }
|
||||
public byte Color { get; set; }
|
||||
}
|
||||
422
Make3.Renderer/TestClass.cs
Normal file
422
Make3.Renderer/TestClass.cs
Normal file
@ -0,0 +1,422 @@
|
||||
using OpenCvSharp;
|
||||
|
||||
namespace Make3.Renderer
|
||||
{
|
||||
internal class TestClass
|
||||
{
|
||||
private readonly Mat _inputMat;
|
||||
|
||||
public TestClass(Stream stream)
|
||||
{
|
||||
_inputMat = Mat.FromStream(stream, ImreadModes.Grayscale); ;
|
||||
}
|
||||
|
||||
public TestClass(Mat inputMat)
|
||||
{
|
||||
_inputMat = inputMat;
|
||||
}
|
||||
|
||||
internal void Execute()
|
||||
{
|
||||
var colors = GetColors();
|
||||
|
||||
var c = _inputMat.Threshold(0, 255, ThresholdTypes.Binary & ThresholdTypes.Otsu);
|
||||
var closing = c.EmptyClone();
|
||||
Cv2.MorphologyEx(c, closing, MorphTypes.Close, null);
|
||||
|
||||
//var contours0 = closing.FindContoursAsArray(RetrievalModes.List, ContourApproximationModes.ApproxNone);
|
||||
Point[][] contours;
|
||||
HierarchyIndex[] hierarchy;
|
||||
//closing.FindContours(out contours1, , RetrievalModes.Tree, ContourApproximationModes.ApproxNone);
|
||||
closing.FindContours(out contours, out hierarchy, RetrievalModes.Tree, ContourApproximationModes.ApproxNone);
|
||||
|
||||
var contNum = 0;
|
||||
|
||||
//var allContursColored = GetContoursColored(contours, hierarchy, contNum);
|
||||
|
||||
var allConturs = GetContoursBW(contours, hierarchy, contNum);
|
||||
allConturs.SaveImage(@$"F:\GS_TEST_c{contNum}.png");
|
||||
|
||||
//colorSeparatedMats.Add(c);
|
||||
allConturs.SaveImage(@$"F:\GS_TEST_cc{contNum}.png");
|
||||
|
||||
DistanceTransform(allConturs, contNum);
|
||||
}
|
||||
|
||||
private List<ushort> GetColors()
|
||||
{
|
||||
var nonZero = _inputMat.FindNonZero();
|
||||
var colors = new List<ushort>();
|
||||
var total = nonZero.Total();
|
||||
for (int i = 0; i < total; i++)
|
||||
{
|
||||
var p = nonZero.At<Point>(i);
|
||||
var color = _inputMat.At<byte>(p.X, p.Y);
|
||||
if (!colors.Contains(color) && color != 0) colors.Add(color);
|
||||
}
|
||||
return colors;
|
||||
}
|
||||
|
||||
private Mat GetContoursColored(Point[][] contours, HierarchyIndex[] hierarchy, int contur)
|
||||
{
|
||||
var result = Mat.Zeros(_inputMat.Size(), MatType.CV_8UC3).ToMat();
|
||||
Cv2.DrawContours(result, contours, contur, new Scalar(hierarchy[contur].Parent < 0 ? 255 : 0, 128, 20 * contur), -1,
|
||||
hierarchy: hierarchy,
|
||||
maxLevel: int.MaxValue);
|
||||
return result;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// sdfsd
|
||||
/// </summary>
|
||||
/// <param name="contours"></param>
|
||||
/// <param name="hierarchy"></param>
|
||||
/// <param name="contur"></param>
|
||||
/// <returns></returns>
|
||||
private Mat GetContoursBW(Point[][] contours, HierarchyIndex[] hierarchy, int contur)
|
||||
{
|
||||
var result = Mat.Zeros(_inputMat.Size(), MatType.CV_8UC1).ToMat();
|
||||
Cv2.DrawContours(result, contours, contur, new Scalar(hierarchy[contur].Parent < 255 ? 255 : 20 * contur), -1,
|
||||
hierarchy: hierarchy,
|
||||
maxLevel: int.MaxValue);
|
||||
return result;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// <para>
|
||||
/// Ссылка на обсуждение нахождения расстояний
|
||||
/// <see href="https://stackoverflow.com/questions/26421566/pixel-indexing-in-opencvs-distance-transform">вот</see> и на форум из комментариев
|
||||
/// <see href="https://answers.opencv.org/question/6109/per-pixel-labeling-in-distancetransform/">ещё вот</see>. Там на C++
|
||||
/// </para>
|
||||
/// <para>
|
||||
/// Вот ещё <see href="https://docs.opencv.org/3.4/d2/dbd/tutorial_distance_transform.html">что-то</see> с DataTransform.
|
||||
/// </para>
|
||||
/// <para>
|
||||
/// И ещё, но <see href="https://www.reddit.com/r/computervision/comments/cj7kqq/any_algorithms_for_finding_closest_two_black/">что-то</see> не читал.
|
||||
/// </para>
|
||||
/// <para>
|
||||
/// <see href="https://www.appsloveworld.com/opencv/100/6/pixel-indexing-in-opencvs-distance-transform">Это</see>, к сожалению, на Питоне,
|
||||
/// и там используется местная библиотека numpy, так что не подходит.
|
||||
/// </para>
|
||||
/// <para>
|
||||
/// Вот <see href="https://python.hotexamples.com/ru/examples/cv2/-/distanceTransformWithLabels/python-distancetransformwithlabels-function-examples.html">тут</see>
|
||||
/// примеры функций типа bwdist и прочих. До конца не смотрел, возможно, что-то и подходит.К сожалению, тоже на Питоне, и также используется numpy.
|
||||
/// </para>
|
||||
/// <para>
|
||||
/// <see href="https://shimat.github.io/opencvsharp_docs/html/f61ce7b7-e1a6-119d-9a73-3d60751e88de.htm">Это</see>
|
||||
/// просто документация, описание DistanceTransformWithLabels. К сожалению, написано очень скудно, и примеров нет.
|
||||
/// </para>
|
||||
/// <para>
|
||||
/// Вот <see href="https://csharpdoc.hotexamples.com/class/OpenCvSharp/Cv2">тут</see>
|
||||
/// примеры функций, но похоже, просто скопировано с докементации, примеров, к сожалению, нет (ну они есть, но <see href="https://csharp.hotexamples.com/examples/OpenCvSharp/Cv2/-/php-cv2-class-examples.html">не те</see>).
|
||||
/// </para>
|
||||
/// </summary>
|
||||
/// <param name="input"></param>
|
||||
/// <param name="contur"></param>
|
||||
private static void DistanceTransform(Mat input, int contur)
|
||||
{
|
||||
var distanceTransform = input.EmptyClone();
|
||||
//Cv2.DistanceTransform(dst1, dst2, DistanceTypes.L2, DistanceTransformMasks.Precise);
|
||||
var labels = input.EmptyClone();
|
||||
Cv2.DistanceTransformWithLabels(input, distanceTransform, labels, DistanceTypes.L2, DistanceTransformMasks.Precise,
|
||||
//Cv2.DistanceTransformWithLabels(dst1, dst2, labelIndexes, DistanceTypes.L2, DistanceTransformMasks.Mask3,
|
||||
DistanceTransformLabelTypes.Pixel);
|
||||
distanceTransform.SaveImage(@$"F:\GS_TEST_ccc{contur}.png");
|
||||
|
||||
//labels.PushBack(-1);
|
||||
var k = 1;
|
||||
for (int i = 0; i < distanceTransform.Height; i++)
|
||||
{
|
||||
for (int j = 0; j < distanceTransform.Width; j++)
|
||||
{
|
||||
var px = distanceTransform.At<int>(i, j);
|
||||
if (px == 0)
|
||||
{
|
||||
//labels.PushBack(new Vec2i(i, j));
|
||||
}
|
||||
else { }
|
||||
var p = labels.At<int>(i, j);
|
||||
|
||||
var p_x = p % labels.Width;
|
||||
var p_y = p / labels.Width;
|
||||
|
||||
var p1 = labels.At<Vec2i>(i, j);
|
||||
var p2 = labels.At<Vec3i>(i, j);
|
||||
var p3 = labels.At<Point2d>(i, j);
|
||||
var p4 = labels.At<Point>(i, j);
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
labels.SaveImage(@$"F:\GS_TEST_cccc{contur}.png");
|
||||
}
|
||||
|
||||
//private void B()
|
||||
//{
|
||||
// using (var s = new FileStream(filePath, FileMode.Open, FileAccess.Read))
|
||||
// {
|
||||
|
||||
// //var m = new Mat();
|
||||
// //var m = Mat.FromStream(s, ImreadModes.Color);
|
||||
// var m = Mat.FromStream(s, ImreadModes.Grayscale);
|
||||
// var result = new List<ushort>();
|
||||
|
||||
// var nonZero = m.FindNonZero();
|
||||
// var colors = new List<ushort>();
|
||||
// var total = nonZero.Total();
|
||||
// for (int i = 0; i < total; i++)
|
||||
// {
|
||||
// var p = nonZero.At<Point>(i);
|
||||
// var color = m.At<byte>(p.X, p.Y);
|
||||
// if (!colors.Contains(color) && color != 0) colors.Add(color);
|
||||
// }
|
||||
|
||||
|
||||
// //___
|
||||
|
||||
// //var c = m.InRange(new Scalar(color), new Scalar(color));
|
||||
|
||||
// var c = m.Threshold(0, 255, ThresholdTypes.Binary & ThresholdTypes.Otsu);
|
||||
|
||||
// var closing = c.EmptyClone();
|
||||
|
||||
// //var contours0 = closing.FindContoursAsMat(RetrievalModes.Tree, ContourApproximationModes.ApproxNone);
|
||||
// //Cv2.MorphologyEx(c, closing, MorphTypes.Close, contours0[0]);
|
||||
// Cv2.MorphologyEx(c, closing, MorphTypes.Close, null);
|
||||
|
||||
// //var contours0 = closing.FindContoursAsArray(RetrievalModes.List, ContourApproximationModes.ApproxNone);
|
||||
// Point[][] contours1;
|
||||
// HierarchyIndex[] hierarchy;
|
||||
// //closing.FindContours(out contours1, , RetrievalModes.Tree, ContourApproximationModes.ApproxNone);
|
||||
// closing.FindContours(out contours1, out hierarchy, RetrievalModes.Tree, ContourApproximationModes.ApproxNone);
|
||||
|
||||
// var contNum = 0;
|
||||
|
||||
// var aaaaa = contours1.Count();
|
||||
|
||||
// var aaa = hierarchy.Where(q => q.Parent < 0).ToList();
|
||||
|
||||
// //var boundingRect = Cv2.BoundingRect(contours1[0]);
|
||||
|
||||
// var dst0 = Mat.Zeros(m.Size(), MatType.CV_8UC3).ToMat();
|
||||
// //var dst0 = new Mat(boundingRect.Size, MatType.CV_8UC3, new Scalar(0, color, 20 * cNum));
|
||||
// //Cv2.DrawContours(dst0, contours1, contNum, new Scalar(0, 128, 20 * contNum), -1,
|
||||
// // LineTypes.Link8, maxLevel: -1);
|
||||
// //Cv2.DrawContours(dst0, contours1, 0, new Scalar(hierarchy[contNum].Parent < 0 ? 255 : 0, 128, 20 * contNum), -1, maxLevel: -1);
|
||||
// //Cv2.DrawContours(dst0, contours1, 0, new Scalar(hierarchy[contNum].Parent < 0 ? 255 : 0, 128, 20 * contNum), -1, maxLevel: int.MaxValue);
|
||||
// Cv2.DrawContours(dst0, contours1, contNum, new Scalar(hierarchy[contNum].Parent < 0 ? 255 : 0, 128, 20 * contNum), -1,
|
||||
// hierarchy: hierarchy,
|
||||
// //maxLevel: -1);
|
||||
// maxLevel: int.MaxValue);
|
||||
// //colorSeparatedMats.Add(c);
|
||||
// dst0.SaveImage(@$"F:\GS_TEST_c{contNum}.png");
|
||||
|
||||
// var boundingRect = Cv2.BoundingRect(contours1[0]);
|
||||
|
||||
// //var dst1 = Mat.Zeros(boundingRect.Size, MatType.CV_8UC1).ToMat();
|
||||
// var dst1 = Mat.Zeros(m.Size(), MatType.CV_8UC1).ToMat();
|
||||
// //var dst0 = new Mat(boundingRect.Size, MatType.CV_8UC3, new Scalar(0, color, 20 * cNum));
|
||||
// //Cv2.DrawContours(dst1, contours1, contNum, new Scalar(hierarchy[contNum].Parent < 0 ? 255 : 0, 128, 20 * contNum), -1,
|
||||
// Cv2.DrawContours(dst1, contours1, contNum, new Scalar(hierarchy[contNum].Parent < 255 ? 255 : 20 * contNum), -1,
|
||||
// hierarchy: hierarchy,
|
||||
// //maxLevel: -1);
|
||||
// maxLevel: int.MaxValue);
|
||||
// //colorSeparatedMats.Add(c);
|
||||
// dst1.SaveImage(@$"F:\GS_TEST_cc{contNum}.png");
|
||||
|
||||
// var dst2 = dst1.EmptyClone();
|
||||
// //Cv2.DistanceTransform(dst1, dst2, DistanceTypes.L2, DistanceTransformMasks.Precise);
|
||||
// var labels = dst1.EmptyClone();
|
||||
// Cv2.DistanceTransformWithLabels(dst1, dst2, labels, DistanceTypes.L2, DistanceTransformMasks.Precise,
|
||||
// //Cv2.DistanceTransformWithLabels(dst1, dst2, labelIndexes, DistanceTypes.L2, DistanceTransformMasks.Mask3,
|
||||
// DistanceTransformLabelTypes.Pixel);
|
||||
// dst2.SaveImage(@$"F:\GS_TEST_ccc{contNum}.png");
|
||||
|
||||
// //labels.PushBack(-1);
|
||||
// var k = 1;
|
||||
// for (int i = 0; i < dst2.Height; i++)
|
||||
// //for (int i = boundingRect.Top; i < boundingRect.Height; i++)
|
||||
// {
|
||||
// for (int j = 0; j < dst2.Width; j++)
|
||||
// //for (int j = boundingRect.Left; j < boundingRect.Width; j++)
|
||||
// {
|
||||
// var px = dst2.At<int>(i, j);
|
||||
// if (px == 0)
|
||||
// {
|
||||
// //labels.PushBack(new Vec2i(i, j));
|
||||
// }
|
||||
// else { }
|
||||
// var p = labels.At<int>(i, j);
|
||||
|
||||
// var p_x = p % labels.Width;
|
||||
// var p_y = p / labels.Width;
|
||||
|
||||
// var p1 = labels.At<Vec2i>(i, j);
|
||||
// var p2 = labels.At<Vec3i>(i, j);
|
||||
// var p3 = labels.At<Point2d>(i, j);
|
||||
// var p4 = labels.At<Point>(i, j);
|
||||
|
||||
// }
|
||||
// }
|
||||
|
||||
// labels.SaveImage(@$"F:\GS_TEST_cccc{contNum}.png");
|
||||
|
||||
|
||||
|
||||
|
||||
// //var un = labels.dis
|
||||
|
||||
// Console.ReadLine();
|
||||
// //foreach (var contour in contours1)
|
||||
// //{
|
||||
// // //if (hierarchy[contNum].Parent < 0)
|
||||
// // //{
|
||||
// // // var boundingRect = Cv2.BoundingRect(contour);
|
||||
|
||||
// // // var dst0 = Mat.Zeros(m.Size(), MatType.CV_8UC3).ToMat();
|
||||
// // // //var dst0 = new Mat(boundingRect.Size, MatType.CV_8UC3, new Scalar(0, color, 20 * cNum));
|
||||
// // // Cv2.DrawContours(dst0, contours1, contNum, new Scalar(0, color, 20 * cNum), -1,
|
||||
// // // LineTypes.Link8, maxLevel: -1);
|
||||
// // // //colorSeparatedMats.Add(c);
|
||||
// // // dst0.SaveImage(@$"F:\GS_TEST_c{cNum}.png");
|
||||
// // //}
|
||||
|
||||
// // var boundingRect = Cv2.BoundingRect(contour);
|
||||
|
||||
// // var dst0 = Mat.Zeros(m.Size(), MatType.CV_8UC3).ToMat();
|
||||
// // //var dst0 = new Mat(boundingRect.Size, MatType.CV_8UC3, new Scalar(0, color, 20 * cNum));
|
||||
// // //Cv2.DrawContours(dst0, contours1, contNum, new Scalar(0, 128, 20 * contNum), -1,
|
||||
// // // LineTypes.Link8, maxLevel: -1);
|
||||
// // Cv2.DrawContours(dst0, contours1, contNum, new Scalar(hierarchy[contNum].Parent < 0 ? 255 : 0, 128, 20 * contNum), -1,
|
||||
// // LineTypes.Link8, maxLevel: -1);
|
||||
// // //colorSeparatedMats.Add(c);
|
||||
// // dst0.SaveImage(@$"F:\GS_TEST_c{contNum}.png");
|
||||
|
||||
|
||||
|
||||
|
||||
// // //var mean = Cv2.Mean(c, mask);
|
||||
// // //var notBlackContour = Cv2.Mean(c, mask)[0] > 0;
|
||||
|
||||
// // //var averageInsideColor =
|
||||
|
||||
|
||||
// // //var c1 = new Mat(boundingRect.Size, MatType.CV_8UC3, new Scalar(0, color, 20 * cNum));
|
||||
// // //var dst0 = c1.EmptyClone();
|
||||
// // //Cv2.BitwiseAnd(c1, c1, dst0, c.GetRectSubPix(boundingRect.Size, new Point2f(boundingRect.Left + (boundingRect.Width / 2), boundingRect.Top + (boundingRect.Height / 2))));
|
||||
|
||||
// // //var c1 = c.CvtColor(ColorConversionCodes.GRAY2BGR);
|
||||
// // //var m1 = c1.InRange(new Scalar(0), new Scalar(255));
|
||||
// // //Cv2.FloodFill(c1, m1, new Point(0, 0), new Scalar(0, color, 20 * cNum));
|
||||
|
||||
// // //dst0.SaveImage(@$"F:\GS_TEST_cc{cNum}_{contNum}.png");
|
||||
// // contNum++;
|
||||
// //}
|
||||
|
||||
// //___
|
||||
|
||||
// //var colorSeparatedMats = new List<Mat>();
|
||||
// //var cNum = 0;
|
||||
// //foreach (var color in colors)
|
||||
// //{
|
||||
|
||||
|
||||
// // //var c = m.InRange(new Scalar(color), new Scalar(color));
|
||||
|
||||
// // var c = m.Threshold(0, 255, ThresholdTypes.Binary & ThresholdTypes.Otsu);
|
||||
|
||||
// // var closing = c.EmptyClone();
|
||||
|
||||
// // //var contours0 = closing.FindContoursAsMat(RetrievalModes.Tree, ContourApproximationModes.ApproxNone);
|
||||
// // //Cv2.MorphologyEx(c, closing, MorphTypes.Close, contours0[0]);
|
||||
// // Cv2.MorphologyEx(c, closing, MorphTypes.Close, null);
|
||||
|
||||
// // //var contours0 = closing.FindContoursAsArray(RetrievalModes.List, ContourApproximationModes.ApproxNone);
|
||||
// // Point[][] contours1;
|
||||
// // HierarchyIndex[] hierarchy;
|
||||
// // //closing.FindContours(out contours1, , RetrievalModes.Tree, ContourApproximationModes.ApproxNone);
|
||||
// // closing.FindContours(out contours1, out hierarchy, RetrievalModes.Tree, ContourApproximationModes.ApproxNone);
|
||||
|
||||
// // var contNum = 0;
|
||||
|
||||
// // var aaaaa = contours1.Count();
|
||||
|
||||
// // var a01 = hierarchy[0].Previous;
|
||||
// // var a02 = hierarchy[0].Next;
|
||||
// // var a03 = hierarchy[1].Previous;
|
||||
// // var a04 = hierarchy[1].Next;
|
||||
|
||||
// // var aaa = hierarchy.Where(q => q.Parent < 0).ToList();
|
||||
|
||||
// // foreach (var contour in contours1)
|
||||
// // {
|
||||
// // //if (hierarchy[contNum].Parent < 0)
|
||||
// // //{
|
||||
// // // var boundingRect = Cv2.BoundingRect(contour);
|
||||
|
||||
// // // var dst0 = Mat.Zeros(m.Size(), MatType.CV_8UC3).ToMat();
|
||||
// // // //var dst0 = new Mat(boundingRect.Size, MatType.CV_8UC3, new Scalar(0, color, 20 * cNum));
|
||||
// // // Cv2.DrawContours(dst0, contours1, contNum, new Scalar(0, color, 20 * cNum), -1,
|
||||
// // // LineTypes.Link8, maxLevel: -1);
|
||||
// // // //colorSeparatedMats.Add(c);
|
||||
// // // dst0.SaveImage(@$"F:\GS_TEST_c{cNum}.png");
|
||||
// // //}
|
||||
|
||||
// // var boundingRect = Cv2.BoundingRect(contour);
|
||||
|
||||
// // var dst0 = Mat.Zeros(m.Size(), MatType.CV_8UC3).ToMat();
|
||||
// // //var dst0 = new Mat(boundingRect.Size, MatType.CV_8UC3, new Scalar(0, color, 20 * cNum));
|
||||
// // Cv2.DrawContours(dst0, contours1, contNum, new Scalar(0, color, 20 * cNum), -1,
|
||||
// // LineTypes.Link8, maxLevel: -1);
|
||||
// // //colorSeparatedMats.Add(c);
|
||||
// // dst0.SaveImage(@$"F:\GS_TEST_c{cNum}.png");
|
||||
|
||||
|
||||
|
||||
|
||||
// // //var mean = Cv2.Mean(c, mask);
|
||||
// // //var notBlackContour = Cv2.Mean(c, mask)[0] > 0;
|
||||
|
||||
// // //var averageInsideColor =
|
||||
|
||||
|
||||
// // //var c1 = new Mat(boundingRect.Size, MatType.CV_8UC3, new Scalar(0, color, 20 * cNum));
|
||||
// // //var dst0 = c1.EmptyClone();
|
||||
// // //Cv2.BitwiseAnd(c1, c1, dst0, c.GetRectSubPix(boundingRect.Size, new Point2f(boundingRect.Left + (boundingRect.Width / 2), boundingRect.Top + (boundingRect.Height / 2))));
|
||||
|
||||
// // //var c1 = c.CvtColor(ColorConversionCodes.GRAY2BGR);
|
||||
// // //var m1 = c1.InRange(new Scalar(0), new Scalar(255));
|
||||
// // //Cv2.FloodFill(c1, m1, new Point(0, 0), new Scalar(0, color, 20 * cNum));
|
||||
|
||||
// // //dst0.SaveImage(@$"F:\GS_TEST_cc{cNum}_{contNum}.png");
|
||||
// // contNum++;
|
||||
// // }
|
||||
|
||||
// // //colorSeparatedMats.Add(c);
|
||||
// // //c.SaveImage(@$"F:\GS_TEST_c{cNum}.png");
|
||||
|
||||
// // cNum++;
|
||||
// //}
|
||||
|
||||
// //foreach (var cMat in colorSeparatedMats)
|
||||
// //{
|
||||
// // cNum++;
|
||||
// //}
|
||||
// //c.SaveImage(@$"F:\GS_TEST_c{cNum}.png");
|
||||
|
||||
// var contours = m.FindContoursAsArray(RetrievalModes.List, ContourApproximationModes.ApproxNone);
|
||||
// var a = contours.Count();
|
||||
// //var c = contours.Where(q => q.).Count();
|
||||
// //var nbl = m.FindNonZero();
|
||||
// //var contours1 = nbl.FindContoursAsArray(RetrievalModes.List, ContourApproximationModes.ApproxNone);
|
||||
// //var b = contours1.Count();
|
||||
// var biggestContourRect = Cv2.BoundingRect(contours[0]);
|
||||
// Mat dst = new Mat();
|
||||
// Cv2.Rectangle(dst,
|
||||
// new Point(biggestContourRect.X, biggestContourRect.Y),
|
||||
// new Point(biggestContourRect.X + biggestContourRect.Width, biggestContourRect.Y + biggestContourRect.Height),
|
||||
// new Scalar(255, 255, 255), 2);
|
||||
// }
|
||||
//}
|
||||
}
|
||||
}
|
||||
Loading…
Reference in New Issue
Block a user